@alexjbarnes/cockpit 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (560) hide show
  1. package/.next/BUILD_ID +1 -1
  2. package/.next/app-path-routes-manifest.json +12 -0
  3. package/.next/build-manifest.json +3 -3
  4. package/.next/prerender-manifest.json +51 -3
  5. package/.next/react-loadable-manifest.json +2 -2
  6. package/.next/routes-manifest.json +76 -0
  7. package/.next/server/app/(app)/agents/[name]/page.js +3 -3
  8. package/.next/server/app/(app)/agents/[name]/page.js.nft.json +1 -1
  9. package/.next/server/app/(app)/agents/[name]/page_client-reference-manifest.js +1 -1
  10. package/.next/server/app/(app)/agents/page.js +2 -2
  11. package/.next/server/app/(app)/agents/page.js.nft.json +1 -1
  12. package/.next/server/app/(app)/agents/page_client-reference-manifest.js +1 -1
  13. package/.next/server/app/(app)/changes/page.js +2 -2
  14. package/.next/server/app/(app)/changes/page.js.nft.json +1 -1
  15. package/.next/server/app/(app)/changes/page_client-reference-manifest.js +1 -1
  16. package/.next/server/app/(app)/claude-md/edit/page.js +2 -2
  17. package/.next/server/app/(app)/claude-md/edit/page.js.nft.json +1 -1
  18. package/.next/server/app/(app)/claude-md/edit/page_client-reference-manifest.js +1 -1
  19. package/.next/server/app/(app)/claude-md/page.js +2 -2
  20. package/.next/server/app/(app)/claude-md/page.js.nft.json +1 -1
  21. package/.next/server/app/(app)/claude-md/page_client-reference-manifest.js +1 -1
  22. package/.next/server/app/(app)/commands/[name]/page.js +3 -3
  23. package/.next/server/app/(app)/commands/[name]/page.js.nft.json +1 -1
  24. package/.next/server/app/(app)/commands/[name]/page_client-reference-manifest.js +1 -1
  25. package/.next/server/app/(app)/commands/page.js +2 -2
  26. package/.next/server/app/(app)/commands/page.js.nft.json +1 -1
  27. package/.next/server/app/(app)/commands/page_client-reference-manifest.js +1 -1
  28. package/.next/server/app/(app)/files/page.js +2 -2
  29. package/.next/server/app/(app)/files/page.js.nft.json +1 -1
  30. package/.next/server/app/(app)/files/page_client-reference-manifest.js +1 -1
  31. package/.next/server/app/(app)/hooks/[event]/page.js +3 -3
  32. package/.next/server/app/(app)/hooks/[event]/page.js.nft.json +1 -1
  33. package/.next/server/app/(app)/hooks/[event]/page_client-reference-manifest.js +1 -1
  34. package/.next/server/app/(app)/hooks/page.js +2 -2
  35. package/.next/server/app/(app)/hooks/page.js.nft.json +1 -1
  36. package/.next/server/app/(app)/hooks/page_client-reference-manifest.js +1 -1
  37. package/.next/server/app/(app)/inbox/[id]/page.js +2 -0
  38. package/.next/server/app/(app)/inbox/[id]/page.js.nft.json +1 -0
  39. package/.next/server/app/(app)/inbox/[id]/page_client-reference-manifest.js +1 -0
  40. package/.next/server/app/(app)/inbox/page.js +2 -0
  41. package/.next/server/app/(app)/inbox/page.js.nft.json +1 -0
  42. package/.next/server/app/(app)/inbox/page_client-reference-manifest.js +1 -0
  43. package/.next/server/app/(app)/jobs/[id]/edit/page.js +2 -2
  44. package/.next/server/app/(app)/jobs/[id]/edit/page.js.nft.json +1 -1
  45. package/.next/server/app/(app)/jobs/[id]/edit/page_client-reference-manifest.js +1 -1
  46. package/.next/server/app/(app)/jobs/[id]/page.js +2 -2
  47. package/.next/server/app/(app)/jobs/[id]/page.js.nft.json +1 -1
  48. package/.next/server/app/(app)/jobs/[id]/page_client-reference-manifest.js +1 -1
  49. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js +2 -2
  50. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page.js.nft.json +1 -1
  51. package/.next/server/app/(app)/jobs/[id]/runs/[runId]/page_client-reference-manifest.js +1 -1
  52. package/.next/server/app/(app)/jobs/page.js +2 -2
  53. package/.next/server/app/(app)/jobs/page.js.nft.json +1 -1
  54. package/.next/server/app/(app)/jobs/page_client-reference-manifest.js +1 -1
  55. package/.next/server/app/(app)/mcp-servers/[name]/page.js +2 -2
  56. package/.next/server/app/(app)/mcp-servers/[name]/page.js.nft.json +1 -1
  57. package/.next/server/app/(app)/mcp-servers/[name]/page_client-reference-manifest.js +1 -1
  58. package/.next/server/app/(app)/mcp-servers/page.js +2 -2
  59. package/.next/server/app/(app)/mcp-servers/page.js.nft.json +1 -1
  60. package/.next/server/app/(app)/mcp-servers/page_client-reference-manifest.js +1 -1
  61. package/.next/server/app/(app)/page.js +2 -2
  62. package/.next/server/app/(app)/page.js.nft.json +1 -1
  63. package/.next/server/app/(app)/page_client-reference-manifest.js +1 -1
  64. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js +9 -9
  65. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page.js.nft.json +1 -1
  66. package/.next/server/app/(app)/reviews/[owner]/[repo]/[number]/page_client-reference-manifest.js +1 -1
  67. package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js +2 -2
  68. package/.next/server/app/(app)/reviews/[owner]/[repo]/page.js.nft.json +1 -1
  69. package/.next/server/app/(app)/reviews/[owner]/[repo]/page_client-reference-manifest.js +1 -1
  70. package/.next/server/app/(app)/reviews/page.js +2 -2
  71. package/.next/server/app/(app)/reviews/page.js.nft.json +1 -1
  72. package/.next/server/app/(app)/reviews/page_client-reference-manifest.js +1 -1
  73. package/.next/server/app/(app)/sessions/[id]/page.js +2 -2
  74. package/.next/server/app/(app)/sessions/[id]/page.js.nft.json +1 -1
  75. package/.next/server/app/(app)/sessions/[id]/page_client-reference-manifest.js +1 -1
  76. package/.next/server/app/(app)/settings/notifications/page.js +2 -0
  77. package/.next/server/app/(app)/settings/notifications/page.js.nft.json +1 -0
  78. package/.next/server/app/(app)/settings/notifications/page_client-reference-manifest.js +1 -0
  79. package/.next/server/app/(app)/settings/page.js +2 -2
  80. package/.next/server/app/(app)/settings/page.js.nft.json +1 -1
  81. package/.next/server/app/(app)/settings/page_client-reference-manifest.js +1 -1
  82. package/.next/server/app/(app)/skills/[name]/page.js +3 -3
  83. package/.next/server/app/(app)/skills/[name]/page.js.nft.json +1 -1
  84. package/.next/server/app/(app)/skills/[name]/page_client-reference-manifest.js +1 -1
  85. package/.next/server/app/(app)/skills/page.js +2 -2
  86. package/.next/server/app/(app)/skills/page.js.nft.json +1 -1
  87. package/.next/server/app/(app)/skills/page_client-reference-manifest.js +1 -1
  88. package/.next/server/app/_global-error/page.js +3 -3
  89. package/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  90. package/.next/server/app/_global-error.html +1 -1
  91. package/.next/server/app/_global-error.rsc +1 -1
  92. package/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  93. package/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  94. package/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  95. package/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  96. package/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  97. package/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  98. package/.next/server/app/_not-found/page.js +2 -2
  99. package/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  100. package/.next/server/app/_not-found.html +1 -1
  101. package/.next/server/app/_not-found.rsc +2 -2
  102. package/.next/server/app/_not-found.segments/_full.segment.rsc +2 -2
  103. package/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  104. package/.next/server/app/_not-found.segments/_index.segment.rsc +2 -2
  105. package/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  106. package/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  107. package/.next/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  108. package/.next/server/app/agents.html +1 -1
  109. package/.next/server/app/agents.rsc +4 -4
  110. package/.next/server/app/agents.segments/!KGFwcCk/agents/__PAGE__.segment.rsc +2 -2
  111. package/.next/server/app/agents.segments/!KGFwcCk/agents.segment.rsc +1 -1
  112. package/.next/server/app/agents.segments/!KGFwcCk.segment.rsc +2 -2
  113. package/.next/server/app/agents.segments/_full.segment.rsc +4 -4
  114. package/.next/server/app/agents.segments/_head.segment.rsc +1 -1
  115. package/.next/server/app/agents.segments/_index.segment.rsc +2 -2
  116. package/.next/server/app/agents.segments/_tree.segment.rsc +2 -2
  117. package/.next/server/app/api/agents/[name]/route.js +1 -1
  118. package/.next/server/app/api/agents/route.js +1 -1
  119. package/.next/server/app/api/auth/check/route.js +1 -1
  120. package/.next/server/app/api/auth/login/route.js +1 -1
  121. package/.next/server/app/api/auth/setup/route.js +1 -1
  122. package/.next/server/app/api/auth/ws-token/route.js +1 -1
  123. package/.next/server/app/api/btw/route.js +2 -2
  124. package/.next/server/app/api/claude-md/route.js +1 -1
  125. package/.next/server/app/api/commands/[name]/route.js +1 -1
  126. package/.next/server/app/api/commands/route.js +1 -1
  127. package/.next/server/app/api/defaults/route.js +1 -1
  128. package/.next/server/app/api/filesystem/browse/route.js +1 -1
  129. package/.next/server/app/api/filesystem/files/route.js +1 -1
  130. package/.next/server/app/api/filesystem/mkdir/route.js +1 -1
  131. package/.next/server/app/api/filesystem/read/route.js +1 -1
  132. package/.next/server/app/api/git/clone/route.js +1 -1
  133. package/.next/server/app/api/git/commit/route.js +1 -1
  134. package/.next/server/app/api/git/diff/route.js +1 -1
  135. package/.next/server/app/api/git/discard/route.js +1 -1
  136. package/.next/server/app/api/git/generate-message/route.js +2 -2
  137. package/.next/server/app/api/git/push/route.js +1 -1
  138. package/.next/server/app/api/git/status/route.js +1 -1
  139. package/.next/server/app/api/github/file-content/route.js +1 -1
  140. package/.next/server/app/api/github/orgs/route.js +1 -1
  141. package/.next/server/app/api/github/prs/checks/route.js +1 -1
  142. package/.next/server/app/api/github/prs/diff/route.js +1 -1
  143. package/.next/server/app/api/github/prs/review/route.js +1 -1
  144. package/.next/server/app/api/github/prs/route.js +1 -1
  145. package/.next/server/app/api/github/prs/view/route.js +1 -1
  146. package/.next/server/app/api/github/repos/route.js +1 -1
  147. package/.next/server/app/api/github/review-session/route.js +1 -1
  148. package/.next/server/app/api/health/route.js +1 -1
  149. package/.next/server/app/api/hooks/route.js +1 -1
  150. package/.next/server/app/api/inbox/[id]/route.js +5 -0
  151. package/.next/server/app/api/inbox/[id]/route.js.nft.json +1 -0
  152. package/.next/server/app/api/inbox/[id]/route_client-reference-manifest.js +1 -0
  153. package/.next/server/app/api/inbox/route.js +5 -0
  154. package/.next/server/app/api/inbox/route.js.nft.json +1 -0
  155. package/.next/server/app/api/inbox/route_client-reference-manifest.js +1 -0
  156. package/.next/server/app/api/jobs/[id]/route.js +1 -1
  157. package/.next/server/app/api/jobs/[id]/runs/[runId]/route.js +1 -1
  158. package/.next/server/app/api/jobs/[id]/runs/[runId]/transcript/route.js +1 -1
  159. package/.next/server/app/api/jobs/[id]/runs/route.js +1 -1
  160. package/.next/server/app/api/jobs/[id]/trigger/route.js +1 -1
  161. package/.next/server/app/api/jobs/mcp-discover/route.js +1 -1
  162. package/.next/server/app/api/jobs/route.js +1 -1
  163. package/.next/server/app/api/jobs/status/route.js +1 -1
  164. package/.next/server/app/api/mcp-servers/[name]/route.js +1 -1
  165. package/.next/server/app/api/mcp-servers/[name]/test/route.js +1 -1
  166. package/.next/server/app/api/mcp-servers/route.js +1 -1
  167. package/.next/server/app/api/notifications/route.js +1 -0
  168. package/.next/server/app/api/notifications/route.js.nft.json +1 -0
  169. package/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -0
  170. package/.next/server/app/api/notifications/test/route.js +5 -0
  171. package/.next/server/app/api/notifications/test/route.js.nft.json +1 -0
  172. package/.next/server/app/api/notifications/test/route_client-reference-manifest.js +1 -0
  173. package/.next/server/app/api/reviews/pinned/route.js +1 -0
  174. package/.next/server/app/api/reviews/pinned/route.js.nft.json +1 -0
  175. package/.next/server/app/api/reviews/pinned/route_client-reference-manifest.js +1 -0
  176. package/.next/server/app/api/sessions/[id]/context/route.js +1 -1
  177. package/.next/server/app/api/sessions/[id]/mcp/route.js +1 -1
  178. package/.next/server/app/api/sessions/[id]/route.js +1 -1
  179. package/.next/server/app/api/sessions/[id]/search/route.js +1 -1
  180. package/.next/server/app/api/sessions/bulk-delete/route.js +1 -0
  181. package/.next/server/app/api/sessions/bulk-delete/route.js.nft.json +1 -0
  182. package/.next/server/app/api/sessions/bulk-delete/route_client-reference-manifest.js +1 -0
  183. package/.next/server/app/api/sessions/by-ids/route.js +1 -0
  184. package/.next/server/app/api/sessions/by-ids/route.js.nft.json +1 -0
  185. package/.next/server/app/api/sessions/by-ids/route_client-reference-manifest.js +1 -0
  186. package/.next/server/app/api/sessions/group/route.js +1 -0
  187. package/.next/server/app/api/sessions/group/route.js.nft.json +1 -0
  188. package/.next/server/app/api/sessions/group/route_client-reference-manifest.js +1 -0
  189. package/.next/server/app/api/sessions/pinned/route.js +1 -1
  190. package/.next/server/app/api/sessions/route.js +1 -1
  191. package/.next/server/app/api/sessions/search/route.js +1 -0
  192. package/.next/server/app/api/sessions/search/route.js.nft.json +1 -0
  193. package/.next/server/app/api/sessions/search/route_client-reference-manifest.js +1 -0
  194. package/.next/server/app/api/skills/[name]/route.js +1 -1
  195. package/.next/server/app/api/skills/route.js +1 -1
  196. package/.next/server/app/api/usage/route.js +1 -1
  197. package/.next/server/app/api/version/cockpit/route.js +1 -1
  198. package/.next/server/app/api/version/route.js +2 -2
  199. package/.next/server/app/changes.html +1 -1
  200. package/.next/server/app/changes.rsc +4 -4
  201. package/.next/server/app/changes.segments/!KGFwcCk/changes/__PAGE__.segment.rsc +2 -2
  202. package/.next/server/app/changes.segments/!KGFwcCk/changes.segment.rsc +1 -1
  203. package/.next/server/app/changes.segments/!KGFwcCk.segment.rsc +2 -2
  204. package/.next/server/app/changes.segments/_full.segment.rsc +4 -4
  205. package/.next/server/app/changes.segments/_head.segment.rsc +1 -1
  206. package/.next/server/app/changes.segments/_index.segment.rsc +2 -2
  207. package/.next/server/app/changes.segments/_tree.segment.rsc +2 -2
  208. package/.next/server/app/claude-md/edit.html +1 -1
  209. package/.next/server/app/claude-md/edit.rsc +4 -4
  210. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit/__PAGE__.segment.rsc +2 -2
  211. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md/edit.segment.rsc +1 -1
  212. package/.next/server/app/claude-md/edit.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
  213. package/.next/server/app/claude-md/edit.segments/!KGFwcCk.segment.rsc +2 -2
  214. package/.next/server/app/claude-md/edit.segments/_full.segment.rsc +4 -4
  215. package/.next/server/app/claude-md/edit.segments/_head.segment.rsc +1 -1
  216. package/.next/server/app/claude-md/edit.segments/_index.segment.rsc +2 -2
  217. package/.next/server/app/claude-md/edit.segments/_tree.segment.rsc +2 -2
  218. package/.next/server/app/claude-md.html +1 -1
  219. package/.next/server/app/claude-md.rsc +4 -4
  220. package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md/__PAGE__.segment.rsc +2 -2
  221. package/.next/server/app/claude-md.segments/!KGFwcCk/claude-md.segment.rsc +1 -1
  222. package/.next/server/app/claude-md.segments/!KGFwcCk.segment.rsc +2 -2
  223. package/.next/server/app/claude-md.segments/_full.segment.rsc +4 -4
  224. package/.next/server/app/claude-md.segments/_head.segment.rsc +1 -1
  225. package/.next/server/app/claude-md.segments/_index.segment.rsc +2 -2
  226. package/.next/server/app/claude-md.segments/_tree.segment.rsc +2 -2
  227. package/.next/server/app/commands.html +1 -1
  228. package/.next/server/app/commands.rsc +4 -4
  229. package/.next/server/app/commands.segments/!KGFwcCk/commands/__PAGE__.segment.rsc +2 -2
  230. package/.next/server/app/commands.segments/!KGFwcCk/commands.segment.rsc +1 -1
  231. package/.next/server/app/commands.segments/!KGFwcCk.segment.rsc +2 -2
  232. package/.next/server/app/commands.segments/_full.segment.rsc +4 -4
  233. package/.next/server/app/commands.segments/_head.segment.rsc +1 -1
  234. package/.next/server/app/commands.segments/_index.segment.rsc +2 -2
  235. package/.next/server/app/commands.segments/_tree.segment.rsc +2 -2
  236. package/.next/server/app/files.html +1 -1
  237. package/.next/server/app/files.rsc +4 -4
  238. package/.next/server/app/files.segments/!KGFwcCk/files/__PAGE__.segment.rsc +2 -2
  239. package/.next/server/app/files.segments/!KGFwcCk/files.segment.rsc +1 -1
  240. package/.next/server/app/files.segments/!KGFwcCk.segment.rsc +2 -2
  241. package/.next/server/app/files.segments/_full.segment.rsc +4 -4
  242. package/.next/server/app/files.segments/_head.segment.rsc +1 -1
  243. package/.next/server/app/files.segments/_index.segment.rsc +2 -2
  244. package/.next/server/app/files.segments/_tree.segment.rsc +2 -2
  245. package/.next/server/app/hooks.html +1 -1
  246. package/.next/server/app/hooks.rsc +4 -4
  247. package/.next/server/app/hooks.segments/!KGFwcCk/hooks/__PAGE__.segment.rsc +2 -2
  248. package/.next/server/app/hooks.segments/!KGFwcCk/hooks.segment.rsc +1 -1
  249. package/.next/server/app/hooks.segments/!KGFwcCk.segment.rsc +2 -2
  250. package/.next/server/app/hooks.segments/_full.segment.rsc +4 -4
  251. package/.next/server/app/hooks.segments/_head.segment.rsc +1 -1
  252. package/.next/server/app/hooks.segments/_index.segment.rsc +2 -2
  253. package/.next/server/app/hooks.segments/_tree.segment.rsc +2 -2
  254. package/.next/server/app/inbox.html +1 -0
  255. package/.next/server/app/inbox.meta +16 -0
  256. package/.next/server/app/inbox.rsc +23 -0
  257. package/.next/server/app/inbox.segments/!KGFwcCk/inbox/__PAGE__.segment.rsc +9 -0
  258. package/.next/server/app/inbox.segments/!KGFwcCk/inbox.segment.rsc +5 -0
  259. package/.next/server/app/inbox.segments/!KGFwcCk.segment.rsc +7 -0
  260. package/.next/server/app/inbox.segments/_full.segment.rsc +23 -0
  261. package/.next/server/app/inbox.segments/_head.segment.rsc +6 -0
  262. package/.next/server/app/inbox.segments/_index.segment.rsc +5 -0
  263. package/.next/server/app/inbox.segments/_tree.segment.rsc +2 -0
  264. package/.next/server/app/index.html +1 -1
  265. package/.next/server/app/index.rsc +4 -4
  266. package/.next/server/app/index.segments/!KGFwcCk/__PAGE__.segment.rsc +2 -2
  267. package/.next/server/app/index.segments/!KGFwcCk.segment.rsc +2 -2
  268. package/.next/server/app/index.segments/_full.segment.rsc +4 -4
  269. package/.next/server/app/index.segments/_head.segment.rsc +1 -1
  270. package/.next/server/app/index.segments/_index.segment.rsc +2 -2
  271. package/.next/server/app/index.segments/_tree.segment.rsc +2 -2
  272. package/.next/server/app/jobs.html +1 -1
  273. package/.next/server/app/jobs.rsc +4 -4
  274. package/.next/server/app/jobs.segments/!KGFwcCk/jobs/__PAGE__.segment.rsc +2 -2
  275. package/.next/server/app/jobs.segments/!KGFwcCk/jobs.segment.rsc +1 -1
  276. package/.next/server/app/jobs.segments/!KGFwcCk.segment.rsc +2 -2
  277. package/.next/server/app/jobs.segments/_full.segment.rsc +4 -4
  278. package/.next/server/app/jobs.segments/_head.segment.rsc +1 -1
  279. package/.next/server/app/jobs.segments/_index.segment.rsc +2 -2
  280. package/.next/server/app/jobs.segments/_tree.segment.rsc +2 -2
  281. package/.next/server/app/login/page.js +2 -2
  282. package/.next/server/app/login/page_client-reference-manifest.js +1 -1
  283. package/.next/server/app/login.html +1 -1
  284. package/.next/server/app/login.rsc +2 -2
  285. package/.next/server/app/login.segments/_full.segment.rsc +2 -2
  286. package/.next/server/app/login.segments/_head.segment.rsc +1 -1
  287. package/.next/server/app/login.segments/_index.segment.rsc +2 -2
  288. package/.next/server/app/login.segments/_tree.segment.rsc +2 -2
  289. package/.next/server/app/login.segments/login/__PAGE__.segment.rsc +1 -1
  290. package/.next/server/app/login.segments/login.segment.rsc +1 -1
  291. package/.next/server/app/mcp-servers.html +1 -1
  292. package/.next/server/app/mcp-servers.rsc +4 -4
  293. package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers/__PAGE__.segment.rsc +2 -2
  294. package/.next/server/app/mcp-servers.segments/!KGFwcCk/mcp-servers.segment.rsc +1 -1
  295. package/.next/server/app/mcp-servers.segments/!KGFwcCk.segment.rsc +2 -2
  296. package/.next/server/app/mcp-servers.segments/_full.segment.rsc +4 -4
  297. package/.next/server/app/mcp-servers.segments/_head.segment.rsc +1 -1
  298. package/.next/server/app/mcp-servers.segments/_index.segment.rsc +2 -2
  299. package/.next/server/app/mcp-servers.segments/_tree.segment.rsc +2 -2
  300. package/.next/server/app/reviews.html +1 -1
  301. package/.next/server/app/reviews.rsc +4 -4
  302. package/.next/server/app/reviews.segments/!KGFwcCk/reviews/__PAGE__.segment.rsc +2 -2
  303. package/.next/server/app/reviews.segments/!KGFwcCk/reviews.segment.rsc +1 -1
  304. package/.next/server/app/reviews.segments/!KGFwcCk.segment.rsc +2 -2
  305. package/.next/server/app/reviews.segments/_full.segment.rsc +4 -4
  306. package/.next/server/app/reviews.segments/_head.segment.rsc +1 -1
  307. package/.next/server/app/reviews.segments/_index.segment.rsc +2 -2
  308. package/.next/server/app/reviews.segments/_tree.segment.rsc +2 -2
  309. package/.next/server/app/settings/notifications.html +1 -0
  310. package/.next/server/app/settings/notifications.meta +17 -0
  311. package/.next/server/app/settings/notifications.rsc +23 -0
  312. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications/__PAGE__.segment.rsc +9 -0
  313. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings/notifications.segment.rsc +5 -0
  314. package/.next/server/app/settings/notifications.segments/!KGFwcCk/settings.segment.rsc +5 -0
  315. package/.next/server/app/settings/notifications.segments/!KGFwcCk.segment.rsc +7 -0
  316. package/.next/server/app/settings/notifications.segments/_full.segment.rsc +23 -0
  317. package/.next/server/app/settings/notifications.segments/_head.segment.rsc +6 -0
  318. package/.next/server/app/settings/notifications.segments/_index.segment.rsc +5 -0
  319. package/.next/server/app/settings/notifications.segments/_tree.segment.rsc +2 -0
  320. package/.next/server/app/settings.html +1 -1
  321. package/.next/server/app/settings.rsc +4 -4
  322. package/.next/server/app/settings.segments/!KGFwcCk/settings/__PAGE__.segment.rsc +2 -2
  323. package/.next/server/app/settings.segments/!KGFwcCk/settings.segment.rsc +1 -1
  324. package/.next/server/app/settings.segments/!KGFwcCk.segment.rsc +2 -2
  325. package/.next/server/app/settings.segments/_full.segment.rsc +4 -4
  326. package/.next/server/app/settings.segments/_head.segment.rsc +1 -1
  327. package/.next/server/app/settings.segments/_index.segment.rsc +2 -2
  328. package/.next/server/app/settings.segments/_tree.segment.rsc +2 -2
  329. package/.next/server/app/skills.html +1 -1
  330. package/.next/server/app/skills.rsc +4 -4
  331. package/.next/server/app/skills.segments/!KGFwcCk/skills/__PAGE__.segment.rsc +2 -2
  332. package/.next/server/app/skills.segments/!KGFwcCk/skills.segment.rsc +1 -1
  333. package/.next/server/app/skills.segments/!KGFwcCk.segment.rsc +2 -2
  334. package/.next/server/app/skills.segments/_full.segment.rsc +4 -4
  335. package/.next/server/app/skills.segments/_head.segment.rsc +1 -1
  336. package/.next/server/app/skills.segments/_index.segment.rsc +2 -2
  337. package/.next/server/app/skills.segments/_tree.segment.rsc +2 -2
  338. package/.next/server/app-paths-manifest.json +12 -0
  339. package/.next/server/chunks/1659.js +1 -1
  340. package/.next/server/chunks/1941.js +2 -2
  341. package/.next/server/chunks/1979.js +2 -2
  342. package/.next/server/chunks/2408.js +1 -1
  343. package/.next/server/chunks/2444.js +1 -1
  344. package/.next/server/chunks/3108.js +1 -0
  345. package/.next/server/chunks/4445.js +1 -1
  346. package/.next/server/chunks/{6142.js → 5920.js} +1 -1
  347. package/.next/server/chunks/5965.js +1 -1
  348. package/.next/server/chunks/{9012.js → 7627.js} +3 -3
  349. package/.next/server/middleware-build-manifest.js +1 -1
  350. package/.next/server/middleware-react-loadable-manifest.js +1 -1
  351. package/.next/server/pages/404.html +1 -1
  352. package/.next/server/pages/500.html +1 -1
  353. package/.next/server/server-reference-manifest.json +1 -1
  354. package/.next/static/brzairTqHmHwvfgKpdkYX/_buildManifest.js +1 -0
  355. package/.next/static/chunks/11242-d240a18d4e59390b.js +199 -0
  356. package/.next/static/chunks/3765-a4c7a493ec83f918.js +20 -0
  357. package/.next/static/chunks/{80392.bca860d8b5972706.js → 58011.3de5770e8b0d8759.js} +1 -1
  358. package/.next/static/chunks/{69427.755a0a4013596f7a.js → 69427.0f379c6bdea95405.js} +1 -1
  359. package/.next/static/chunks/75866-76a3987dda1295ae.js +1 -0
  360. package/.next/static/chunks/93273-87110c1449e1e7fd.js +6 -0
  361. package/.next/static/chunks/app/(app)/agents/[name]/{page-44c5691c80f17d38.js → page-3ec9a3460e8e9006.js} +2 -2
  362. package/.next/static/chunks/app/(app)/agents/page-d6d504e7d7757ea2.js +1 -0
  363. package/.next/static/chunks/app/(app)/changes/page-a09bf4742aa8b5ce.js +1 -0
  364. package/.next/static/chunks/app/(app)/claude-md/edit/page-ab42921ba2618dc3.js +1 -0
  365. package/.next/static/chunks/app/(app)/claude-md/page-c4c8b20aa002a94a.js +1 -0
  366. package/.next/static/chunks/app/(app)/commands/[name]/{page-6ef571e73b105248.js → page-2124ffed9a4e95a3.js} +2 -2
  367. package/.next/static/chunks/app/(app)/commands/page-d5bf1bddd17e31dd.js +1 -0
  368. package/.next/static/chunks/app/(app)/files/page-04e4e5bf1ca89945.js +1 -0
  369. package/.next/static/chunks/app/(app)/hooks/[event]/{page-03f85595561b068a.js → page-d988623e739973b5.js} +2 -2
  370. package/.next/static/chunks/app/(app)/hooks/page-818242d7db432578.js +1 -0
  371. package/.next/static/chunks/app/(app)/inbox/[id]/page-c33dc94e309ff117.js +1 -0
  372. package/.next/static/chunks/app/(app)/inbox/page-ca3e1724b5072734.js +1 -0
  373. package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-3a1c927d76333bf0.js +1 -0
  374. package/.next/static/chunks/app/(app)/jobs/[id]/page-8e698e00b90968b0.js +1 -0
  375. package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-f942df0b7c1d280b.js +1 -0
  376. package/.next/static/chunks/app/(app)/jobs/page-7a88cc6ac34550c2.js +1 -0
  377. package/.next/static/chunks/app/(app)/layout-81c1899969de11e6.js +1 -0
  378. package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-3541bf3ccdef9145.js +1 -0
  379. package/.next/static/chunks/app/(app)/mcp-servers/page-3927dfd03d921040.js +1 -0
  380. package/.next/static/chunks/app/(app)/page-594120e0ea1df527.js +1 -0
  381. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-74c23b04f5c3ff88.js +13 -0
  382. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/page-c7473a899c7c59c3.js +1 -0
  383. package/.next/static/chunks/app/(app)/reviews/page-0e6e7395a4f62b50.js +1 -0
  384. package/.next/static/chunks/app/(app)/sessions/[id]/page-435e9fb4dd34007d.js +1 -0
  385. package/.next/static/chunks/app/(app)/settings/notifications/page-a28db2ebc9fd0de8.js +1 -0
  386. package/.next/static/chunks/app/(app)/settings/page-f8ada7997c0d5b03.js +1 -0
  387. package/.next/static/chunks/app/(app)/skills/[name]/{page-e6572062a6ad90df.js → page-5dbe1e7682880145.js} +2 -2
  388. package/.next/static/chunks/app/(app)/skills/page-fd1986ad7e060f4d.js +1 -0
  389. package/.next/static/chunks/app/_global-error/page-65c661eddfc65f5b.js +1 -0
  390. package/.next/static/chunks/app/api/agents/[name]/route-65c661eddfc65f5b.js +1 -0
  391. package/.next/static/chunks/app/api/agents/route-65c661eddfc65f5b.js +1 -0
  392. package/.next/static/chunks/app/api/auth/check/route-65c661eddfc65f5b.js +1 -0
  393. package/.next/static/chunks/app/api/auth/login/route-65c661eddfc65f5b.js +1 -0
  394. package/.next/static/chunks/app/api/auth/setup/route-65c661eddfc65f5b.js +1 -0
  395. package/.next/static/chunks/app/api/auth/ws-token/route-65c661eddfc65f5b.js +1 -0
  396. package/.next/static/chunks/app/api/btw/route-65c661eddfc65f5b.js +1 -0
  397. package/.next/static/chunks/app/api/claude-md/route-65c661eddfc65f5b.js +1 -0
  398. package/.next/static/chunks/app/api/commands/[name]/route-65c661eddfc65f5b.js +1 -0
  399. package/.next/static/chunks/app/api/commands/route-65c661eddfc65f5b.js +1 -0
  400. package/.next/static/chunks/app/api/defaults/route-65c661eddfc65f5b.js +1 -0
  401. package/.next/static/chunks/app/api/filesystem/browse/route-65c661eddfc65f5b.js +1 -0
  402. package/.next/static/chunks/app/api/filesystem/files/route-65c661eddfc65f5b.js +1 -0
  403. package/.next/static/chunks/app/api/filesystem/mkdir/route-65c661eddfc65f5b.js +1 -0
  404. package/.next/static/chunks/app/api/filesystem/read/route-65c661eddfc65f5b.js +1 -0
  405. package/.next/static/chunks/app/api/git/clone/route-65c661eddfc65f5b.js +1 -0
  406. package/.next/static/chunks/app/api/git/commit/route-65c661eddfc65f5b.js +1 -0
  407. package/.next/static/chunks/app/api/git/diff/route-65c661eddfc65f5b.js +1 -0
  408. package/.next/static/chunks/app/api/git/discard/route-65c661eddfc65f5b.js +1 -0
  409. package/.next/static/chunks/app/api/git/generate-message/route-65c661eddfc65f5b.js +1 -0
  410. package/.next/static/chunks/app/api/git/push/route-65c661eddfc65f5b.js +1 -0
  411. package/.next/static/chunks/app/api/git/status/route-65c661eddfc65f5b.js +1 -0
  412. package/.next/static/chunks/app/api/github/file-content/route-65c661eddfc65f5b.js +1 -0
  413. package/.next/static/chunks/app/api/github/orgs/route-65c661eddfc65f5b.js +1 -0
  414. package/.next/static/chunks/app/api/github/prs/checks/route-65c661eddfc65f5b.js +1 -0
  415. package/.next/static/chunks/app/api/github/prs/diff/route-65c661eddfc65f5b.js +1 -0
  416. package/.next/static/chunks/app/api/github/prs/review/route-65c661eddfc65f5b.js +1 -0
  417. package/.next/static/chunks/app/api/github/prs/route-65c661eddfc65f5b.js +1 -0
  418. package/.next/static/chunks/app/api/github/prs/view/route-65c661eddfc65f5b.js +1 -0
  419. package/.next/static/chunks/app/api/github/repos/route-65c661eddfc65f5b.js +1 -0
  420. package/.next/static/chunks/app/api/github/review-session/route-65c661eddfc65f5b.js +1 -0
  421. package/.next/static/chunks/app/api/health/route-65c661eddfc65f5b.js +1 -0
  422. package/.next/static/chunks/app/api/hooks/route-65c661eddfc65f5b.js +1 -0
  423. package/.next/static/chunks/app/api/inbox/[id]/route-65c661eddfc65f5b.js +1 -0
  424. package/.next/static/chunks/app/api/inbox/route-65c661eddfc65f5b.js +1 -0
  425. package/.next/static/chunks/app/api/jobs/[id]/route-65c661eddfc65f5b.js +1 -0
  426. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-65c661eddfc65f5b.js +1 -0
  427. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-65c661eddfc65f5b.js +1 -0
  428. package/.next/static/chunks/app/api/jobs/[id]/runs/route-65c661eddfc65f5b.js +1 -0
  429. package/.next/static/chunks/app/api/jobs/[id]/trigger/route-65c661eddfc65f5b.js +1 -0
  430. package/.next/static/chunks/app/api/jobs/mcp-discover/route-65c661eddfc65f5b.js +1 -0
  431. package/.next/static/chunks/app/api/jobs/route-65c661eddfc65f5b.js +1 -0
  432. package/.next/static/chunks/app/api/jobs/status/route-65c661eddfc65f5b.js +1 -0
  433. package/.next/static/chunks/app/api/mcp-servers/[name]/route-65c661eddfc65f5b.js +1 -0
  434. package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-65c661eddfc65f5b.js +1 -0
  435. package/.next/static/chunks/app/api/mcp-servers/route-65c661eddfc65f5b.js +1 -0
  436. package/.next/static/chunks/app/api/notifications/route-65c661eddfc65f5b.js +1 -0
  437. package/.next/static/chunks/app/api/notifications/test/route-65c661eddfc65f5b.js +1 -0
  438. package/.next/static/chunks/app/api/reviews/pinned/route-65c661eddfc65f5b.js +1 -0
  439. package/.next/static/chunks/app/api/sessions/[id]/context/route-65c661eddfc65f5b.js +1 -0
  440. package/.next/static/chunks/app/api/sessions/[id]/mcp/route-65c661eddfc65f5b.js +1 -0
  441. package/.next/static/chunks/app/api/sessions/[id]/route-65c661eddfc65f5b.js +1 -0
  442. package/.next/static/chunks/app/api/sessions/[id]/search/route-65c661eddfc65f5b.js +1 -0
  443. package/.next/static/chunks/app/api/sessions/bulk-delete/route-65c661eddfc65f5b.js +1 -0
  444. package/.next/static/chunks/app/api/sessions/by-ids/route-65c661eddfc65f5b.js +1 -0
  445. package/.next/static/chunks/app/api/sessions/group/route-65c661eddfc65f5b.js +1 -0
  446. package/.next/static/chunks/app/api/sessions/pinned/route-65c661eddfc65f5b.js +1 -0
  447. package/.next/static/chunks/app/api/sessions/route-65c661eddfc65f5b.js +1 -0
  448. package/.next/static/chunks/app/api/sessions/search/route-65c661eddfc65f5b.js +1 -0
  449. package/.next/static/chunks/app/api/skills/[name]/route-65c661eddfc65f5b.js +1 -0
  450. package/.next/static/chunks/app/api/skills/route-65c661eddfc65f5b.js +1 -0
  451. package/.next/static/chunks/app/api/usage/route-65c661eddfc65f5b.js +1 -0
  452. package/.next/static/chunks/app/api/version/cockpit/route-65c661eddfc65f5b.js +1 -0
  453. package/.next/static/chunks/app/api/version/route-65c661eddfc65f5b.js +1 -0
  454. package/.next/static/chunks/next/dist/client/components/builtin/app-error-65c661eddfc65f5b.js +1 -0
  455. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-65c661eddfc65f5b.js +1 -0
  456. package/.next/static/chunks/next/dist/client/components/builtin/not-found-65c661eddfc65f5b.js +1 -0
  457. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-65c661eddfc65f5b.js +1 -0
  458. package/.next/static/chunks/{webpack-2a5835e108df6f34.js → webpack-3461a05957b13f46.js} +1 -1
  459. package/.next/static/css/f04f303b5708dd90.css +1 -0
  460. package/README.md +14 -4
  461. package/dist/server.js +38 -1
  462. package/dist/src/server/defaults.js +2 -0
  463. package/dist/src/server/inbox.js +132 -0
  464. package/dist/src/server/job-scheduler.js +152 -40
  465. package/dist/src/server/job-storage.js +4 -7
  466. package/dist/src/server/notification-settings.js +39 -0
  467. package/dist/src/server/notifications.js +125 -0
  468. package/dist/src/server/session-manager.js +118 -15
  469. package/dist/src/server/transcript.js +271 -6
  470. package/dist/src/server/ws-handler.js +16 -13
  471. package/package.json +1 -1
  472. package/.next/server/chunks/8346.js +0 -1
  473. package/.next/static/V2EfPtTUC96VYyF12K0om/_buildManifest.js +0 -1
  474. package/.next/static/chunks/22086-756d490e3320ad15.js +0 -1
  475. package/.next/static/chunks/30120-1535e9064b17ce74.js +0 -20
  476. package/.next/static/chunks/66997-652baf5596173fea.js +0 -199
  477. package/.next/static/chunks/93273-c5cb6dcedef67c81.js +0 -6
  478. package/.next/static/chunks/app/(app)/agents/page-4ce7a715bc0145dc.js +0 -1
  479. package/.next/static/chunks/app/(app)/changes/page-84cf4cd3ca347d98.js +0 -1
  480. package/.next/static/chunks/app/(app)/claude-md/edit/page-fb7117171d0f94d2.js +0 -1
  481. package/.next/static/chunks/app/(app)/claude-md/page-9503f1415e660911.js +0 -1
  482. package/.next/static/chunks/app/(app)/commands/page-e8a506da73d1c280.js +0 -1
  483. package/.next/static/chunks/app/(app)/files/page-67a95d351a685d79.js +0 -1
  484. package/.next/static/chunks/app/(app)/hooks/page-5578c83ad353e307.js +0 -1
  485. package/.next/static/chunks/app/(app)/jobs/[id]/edit/page-51d784c59737778c.js +0 -1
  486. package/.next/static/chunks/app/(app)/jobs/[id]/page-7d00e7a01c70a261.js +0 -1
  487. package/.next/static/chunks/app/(app)/jobs/[id]/runs/[runId]/page-665191da233fde19.js +0 -1
  488. package/.next/static/chunks/app/(app)/jobs/page-8b4ee1166a53d5e1.js +0 -1
  489. package/.next/static/chunks/app/(app)/layout-8dad55d6ce637a01.js +0 -1
  490. package/.next/static/chunks/app/(app)/mcp-servers/[name]/page-c30f0d78daf7719e.js +0 -1
  491. package/.next/static/chunks/app/(app)/mcp-servers/page-737b87d338afdb49.js +0 -1
  492. package/.next/static/chunks/app/(app)/page-40052655d2a9a84f.js +0 -1
  493. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/[number]/page-1d9179bf5a4de7a4.js +0 -13
  494. package/.next/static/chunks/app/(app)/reviews/[owner]/[repo]/page-d8a9ee39e7cc056a.js +0 -1
  495. package/.next/static/chunks/app/(app)/reviews/page-098e6e6fe3123e02.js +0 -1
  496. package/.next/static/chunks/app/(app)/sessions/[id]/page-a74f7fe8322678ba.js +0 -1
  497. package/.next/static/chunks/app/(app)/settings/page-1fa46b8ac8e22927.js +0 -1
  498. package/.next/static/chunks/app/(app)/skills/page-8fca8814aa818ae6.js +0 -1
  499. package/.next/static/chunks/app/_global-error/page-b277aba73f9e0212.js +0 -1
  500. package/.next/static/chunks/app/api/agents/[name]/route-b277aba73f9e0212.js +0 -1
  501. package/.next/static/chunks/app/api/agents/route-b277aba73f9e0212.js +0 -1
  502. package/.next/static/chunks/app/api/auth/check/route-b277aba73f9e0212.js +0 -1
  503. package/.next/static/chunks/app/api/auth/login/route-b277aba73f9e0212.js +0 -1
  504. package/.next/static/chunks/app/api/auth/setup/route-b277aba73f9e0212.js +0 -1
  505. package/.next/static/chunks/app/api/auth/ws-token/route-b277aba73f9e0212.js +0 -1
  506. package/.next/static/chunks/app/api/btw/route-b277aba73f9e0212.js +0 -1
  507. package/.next/static/chunks/app/api/claude-md/route-b277aba73f9e0212.js +0 -1
  508. package/.next/static/chunks/app/api/commands/[name]/route-b277aba73f9e0212.js +0 -1
  509. package/.next/static/chunks/app/api/commands/route-b277aba73f9e0212.js +0 -1
  510. package/.next/static/chunks/app/api/defaults/route-b277aba73f9e0212.js +0 -1
  511. package/.next/static/chunks/app/api/filesystem/browse/route-b277aba73f9e0212.js +0 -1
  512. package/.next/static/chunks/app/api/filesystem/files/route-b277aba73f9e0212.js +0 -1
  513. package/.next/static/chunks/app/api/filesystem/mkdir/route-b277aba73f9e0212.js +0 -1
  514. package/.next/static/chunks/app/api/filesystem/read/route-b277aba73f9e0212.js +0 -1
  515. package/.next/static/chunks/app/api/git/clone/route-b277aba73f9e0212.js +0 -1
  516. package/.next/static/chunks/app/api/git/commit/route-b277aba73f9e0212.js +0 -1
  517. package/.next/static/chunks/app/api/git/diff/route-b277aba73f9e0212.js +0 -1
  518. package/.next/static/chunks/app/api/git/discard/route-b277aba73f9e0212.js +0 -1
  519. package/.next/static/chunks/app/api/git/generate-message/route-b277aba73f9e0212.js +0 -1
  520. package/.next/static/chunks/app/api/git/push/route-b277aba73f9e0212.js +0 -1
  521. package/.next/static/chunks/app/api/git/status/route-b277aba73f9e0212.js +0 -1
  522. package/.next/static/chunks/app/api/github/file-content/route-b277aba73f9e0212.js +0 -1
  523. package/.next/static/chunks/app/api/github/orgs/route-b277aba73f9e0212.js +0 -1
  524. package/.next/static/chunks/app/api/github/prs/checks/route-b277aba73f9e0212.js +0 -1
  525. package/.next/static/chunks/app/api/github/prs/diff/route-b277aba73f9e0212.js +0 -1
  526. package/.next/static/chunks/app/api/github/prs/review/route-b277aba73f9e0212.js +0 -1
  527. package/.next/static/chunks/app/api/github/prs/route-b277aba73f9e0212.js +0 -1
  528. package/.next/static/chunks/app/api/github/prs/view/route-b277aba73f9e0212.js +0 -1
  529. package/.next/static/chunks/app/api/github/repos/route-b277aba73f9e0212.js +0 -1
  530. package/.next/static/chunks/app/api/github/review-session/route-b277aba73f9e0212.js +0 -1
  531. package/.next/static/chunks/app/api/health/route-b277aba73f9e0212.js +0 -1
  532. package/.next/static/chunks/app/api/hooks/route-b277aba73f9e0212.js +0 -1
  533. package/.next/static/chunks/app/api/jobs/[id]/route-b277aba73f9e0212.js +0 -1
  534. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/route-b277aba73f9e0212.js +0 -1
  535. package/.next/static/chunks/app/api/jobs/[id]/runs/[runId]/transcript/route-b277aba73f9e0212.js +0 -1
  536. package/.next/static/chunks/app/api/jobs/[id]/runs/route-b277aba73f9e0212.js +0 -1
  537. package/.next/static/chunks/app/api/jobs/[id]/trigger/route-b277aba73f9e0212.js +0 -1
  538. package/.next/static/chunks/app/api/jobs/mcp-discover/route-b277aba73f9e0212.js +0 -1
  539. package/.next/static/chunks/app/api/jobs/route-b277aba73f9e0212.js +0 -1
  540. package/.next/static/chunks/app/api/jobs/status/route-b277aba73f9e0212.js +0 -1
  541. package/.next/static/chunks/app/api/mcp-servers/[name]/route-b277aba73f9e0212.js +0 -1
  542. package/.next/static/chunks/app/api/mcp-servers/[name]/test/route-b277aba73f9e0212.js +0 -1
  543. package/.next/static/chunks/app/api/mcp-servers/route-b277aba73f9e0212.js +0 -1
  544. package/.next/static/chunks/app/api/sessions/[id]/context/route-b277aba73f9e0212.js +0 -1
  545. package/.next/static/chunks/app/api/sessions/[id]/mcp/route-b277aba73f9e0212.js +0 -1
  546. package/.next/static/chunks/app/api/sessions/[id]/route-b277aba73f9e0212.js +0 -1
  547. package/.next/static/chunks/app/api/sessions/[id]/search/route-b277aba73f9e0212.js +0 -1
  548. package/.next/static/chunks/app/api/sessions/pinned/route-b277aba73f9e0212.js +0 -1
  549. package/.next/static/chunks/app/api/sessions/route-b277aba73f9e0212.js +0 -1
  550. package/.next/static/chunks/app/api/skills/[name]/route-b277aba73f9e0212.js +0 -1
  551. package/.next/static/chunks/app/api/skills/route-b277aba73f9e0212.js +0 -1
  552. package/.next/static/chunks/app/api/usage/route-b277aba73f9e0212.js +0 -1
  553. package/.next/static/chunks/app/api/version/cockpit/route-b277aba73f9e0212.js +0 -1
  554. package/.next/static/chunks/app/api/version/route-b277aba73f9e0212.js +0 -1
  555. package/.next/static/chunks/next/dist/client/components/builtin/app-error-b277aba73f9e0212.js +0 -1
  556. package/.next/static/chunks/next/dist/client/components/builtin/forbidden-b277aba73f9e0212.js +0 -1
  557. package/.next/static/chunks/next/dist/client/components/builtin/not-found-b277aba73f9e0212.js +0 -1
  558. package/.next/static/chunks/next/dist/client/components/builtin/unauthorized-b277aba73f9e0212.js +0 -1
  559. package/.next/static/css/1e1239c76b265910.css +0 -1
  560. /package/.next/static/{V2EfPtTUC96VYyF12K0om → brzairTqHmHwvfgKpdkYX}/_ssgManifest.js +0 -0
@@ -54,6 +54,7 @@ class SessionManager {
54
54
  lastActiveAt: now,
55
55
  status: "idle",
56
56
  model: defaults.model || undefined,
57
+ pendingRequestCount: 0,
57
58
  };
58
59
  this.sessions.set(id, {
59
60
  info,
@@ -100,6 +101,7 @@ class SessionManager {
100
101
  lastActiveAt: now,
101
102
  status: "idle",
102
103
  model: prefs?.model || defaults.model || undefined,
104
+ pendingRequestCount: 0,
103
105
  },
104
106
  process: null,
105
107
  stdin: null,
@@ -146,12 +148,15 @@ class SessionManager {
146
148
  this.ensureSession(id, cwd);
147
149
  session = this.sessions.get(id);
148
150
  }
149
- const result = await (0, transcript_1.loadTranscript)(session.cliSessionId, session.info.cwd, { tailLines: 150 });
151
+ const stitching = (0, defaults_1.getDefaults)().messageStitching;
152
+ const willStitch = stitching && session.previousCliSessionIds.length > 0;
153
+ // Load full current session when stitching to avoid losing middle messages.
154
+ // Without stitching, tail-read is fine because byteOffset stays pointing at
155
+ // the current session's file for backward pagination.
156
+ const result = await (0, transcript_1.loadTranscript)(session.cliSessionId, session.info.cwd, willStitch ? undefined : { tailLines: 150 });
150
157
  let { messages, byteOffset, totalSize, lastUsage } = result;
151
158
  session.bufferCliSessionId = session.cliSessionId;
152
- // Stitch previous session messages across /clear boundaries so the full
153
- // conversation is visible on refresh instead of only post-clear messages.
154
- if (session.previousCliSessionIds.length > 0) {
159
+ if (willStitch) {
155
160
  const currentMessages = messages;
156
161
  for (let i = session.previousCliSessionIds.length - 1; i >= 0; i--) {
157
162
  const prevId = session.previousCliSessionIds[i];
@@ -178,11 +183,11 @@ class SessionManager {
178
183
  session.transcriptByteOffset = byteOffset;
179
184
  session.transcriptTotalSize = totalSize;
180
185
  // Fresh pagination copy so getMoreHistory doesn't consume the canonical list
181
- session.paginationPrevIds = [...session.previousCliSessionIds];
186
+ session.paginationPrevIds = stitching ? [...session.previousCliSessionIds] : [];
182
187
  // Send last 50 to client, keep rest in buffer
183
188
  const PAGE = 50;
184
189
  const clientMessages = messages.length > PAGE ? messages.slice(-PAGE) : messages;
185
- const hasMore = messages.length > PAGE || byteOffset > 0 || session.previousCliSessionIds.length > 0;
190
+ const hasMore = messages.length > PAGE || byteOffset > 0 || (stitching && session.previousCliSessionIds.length > 0);
186
191
  const defaultName = node_path_1.default.basename(session.info.cwd) || session.info.cwd;
187
192
  if (session.info.name === defaultName && messages.length > 0) {
188
193
  const firstUser = messages.find((m) => m.role === "user" && m.content && !m.content.startsWith("[") && !m.content.startsWith("<"));
@@ -195,12 +200,12 @@ class SessionManager {
195
200
  async getSessionByCwd(id, cwd) {
196
201
  this.ensureSession(id, cwd);
197
202
  const session = this.sessions.get(id);
198
- const result = await (0, transcript_1.loadTranscript)(session.cliSessionId, cwd, { tailLines: 150 });
203
+ const stitching = (0, defaults_1.getDefaults)().messageStitching;
204
+ const willStitch = stitching && session.previousCliSessionIds.length > 0;
205
+ const result = await (0, transcript_1.loadTranscript)(session.cliSessionId, cwd, willStitch ? undefined : { tailLines: 150 });
199
206
  let { messages, byteOffset, totalSize, lastUsage } = result;
200
207
  session.bufferCliSessionId = session.cliSessionId;
201
- // Stitch previous session messages across /clear boundaries so the full
202
- // conversation is visible on refresh instead of only post-clear messages.
203
- if (session.previousCliSessionIds.length > 0) {
208
+ if (willStitch) {
204
209
  const currentMessages = messages;
205
210
  for (let i = session.previousCliSessionIds.length - 1; i >= 0; i--) {
206
211
  const prevId = session.previousCliSessionIds[i];
@@ -227,11 +232,11 @@ class SessionManager {
227
232
  session.transcriptByteOffset = byteOffset;
228
233
  session.transcriptTotalSize = totalSize;
229
234
  // Fresh pagination copy so getMoreHistory doesn't consume the canonical list
230
- session.paginationPrevIds = [...session.previousCliSessionIds];
235
+ session.paginationPrevIds = stitching ? [...session.previousCliSessionIds] : [];
231
236
  // Send last 50 to client, keep rest in buffer
232
237
  const PAGE = 50;
233
238
  const clientMessages = messages.length > PAGE ? messages.slice(-PAGE) : messages;
234
- const hasMore = messages.length > PAGE || byteOffset > 0 || session.previousCliSessionIds.length > 0;
239
+ const hasMore = messages.length > PAGE || byteOffset > 0 || (stitching && session.previousCliSessionIds.length > 0);
235
240
  // Derive title from first user message if name is still the default
236
241
  const defaultName = node_path_1.default.basename(cwd) || cwd;
237
242
  if (session.info.name === defaultName && messages.length > 0) {
@@ -247,9 +252,10 @@ class SessionManager {
247
252
  return null;
248
253
  const chain = (0, session_prefs_1.findChainForCliSession)(cliId);
249
254
  const prevIds = chain ? chain.truncatedPrevIds : [];
250
- const result = await (0, transcript_1.loadTranscript)(cliId, cwd, { tailLines: 150 });
255
+ const willStitch = (0, defaults_1.getDefaults)().messageStitching && prevIds.length > 0;
256
+ const result = await (0, transcript_1.loadTranscript)(cliId, cwd, willStitch ? undefined : { tailLines: 150 });
251
257
  let { messages, lastUsage } = result;
252
- if (prevIds.length > 0) {
258
+ if (willStitch) {
253
259
  const currentMessages = messages;
254
260
  for (let i = prevIds.length - 1; i >= 0; i--) {
255
261
  const prevResult = await (0, transcript_1.loadTranscript)(prevIds[i], cwd, { tailLines: 150 });
@@ -382,11 +388,16 @@ class SessionManager {
382
388
  const session = this.sessions.get(id);
383
389
  return !!session?.process;
384
390
  }
391
+ hasRunningProcess(id) {
392
+ const session = this.sessions.get(id);
393
+ return !!session?.process;
394
+ }
385
395
  fixStaleStatus(id) {
386
396
  const session = this.sessions.get(id);
387
397
  if (session && session.info.status === "running" && !session.process) {
388
398
  session.info.status = "idle";
389
399
  session.pendingRequests.clear();
400
+ this.notifyPendingChanged(session, id);
390
401
  }
391
402
  }
392
403
  restartSession(sessionId) {
@@ -399,6 +410,7 @@ class SessionManager {
399
410
  }
400
411
  this.killProcess(session);
401
412
  session.pendingRequests.clear();
413
+ this.notifyPendingChanged(session, sessionId);
402
414
  session.streamingSnapshot = null;
403
415
  session.info.status = "idle";
404
416
  session.emitter.emit("status", sessionId, "idle");
@@ -437,6 +449,16 @@ class SessionManager {
437
449
  session.emitter.on("status", handler);
438
450
  return () => session.emitter.off("status", handler);
439
451
  }
452
+ onPending(id, listener) {
453
+ const session = this.sessions.get(id);
454
+ if (!session)
455
+ return null;
456
+ const handler = (_sessionId, count) => {
457
+ listener(count);
458
+ };
459
+ session.emitter.on("pending", handler);
460
+ return () => session.emitter.off("pending", handler);
461
+ }
440
462
  onError(id, listener) {
441
463
  const session = this.sessions.get(id);
442
464
  if (!session)
@@ -484,12 +506,14 @@ class SessionManager {
484
506
  const session = this.sessions.get(sessionId);
485
507
  if (session) {
486
508
  session.pendingRequests.set(request.requestId, request);
509
+ this.notifyPendingChanged(session, sessionId);
487
510
  }
488
511
  }
489
512
  removePendingRequest(sessionId, requestId) {
490
513
  const session = this.sessions.get(sessionId);
491
514
  if (session) {
492
515
  session.pendingRequests.delete(requestId);
516
+ this.notifyPendingChanged(session, sessionId);
493
517
  }
494
518
  }
495
519
  getPendingRequests(sessionId) {
@@ -498,11 +522,15 @@ class SessionManager {
498
522
  return [];
499
523
  return Array.from(session.pendingRequests.values());
500
524
  }
525
+ getPendingRequest(sessionId, requestId) {
526
+ return this.sessions.get(sessionId)?.pendingRequests.get(requestId);
527
+ }
501
528
  respondToPermission(sessionId, requestId, allowed, toolInput, permissionSuggestions, denyReason) {
502
529
  const session = this.sessions.get(sessionId);
503
530
  if (!session?.stdin)
504
531
  return false;
505
532
  session.pendingRequests.delete(requestId);
533
+ this.notifyPendingChanged(session, sessionId);
506
534
  const response = {
507
535
  type: "control_response",
508
536
  response: {
@@ -511,7 +539,7 @@ class SessionManager {
511
539
  response: allowed
512
540
  ? {
513
541
  behavior: "allow",
514
- ...(toolInput ? { updatedInput: toolInput } : {}),
542
+ updatedInput: toolInput ?? {},
515
543
  ...(permissionSuggestions?.length ? { updatedPermissions: permissionSuggestions } : {}),
516
544
  }
517
545
  : { behavior: "deny", message: denyReason ?? "User denied" },
@@ -540,6 +568,7 @@ class SessionManager {
540
568
  // Don't change CLI mode while in plan mode; bypass will restore on plan exit
541
569
  if (!session.planMode) {
542
570
  this.sendPermissionMode(session, sessionId, "bypassPermissions");
571
+ this.scheduleRespawnForPermissions(session);
543
572
  }
544
573
  this.emitSystem(session, sessionId, "__bypass_state::on");
545
574
  }
@@ -551,9 +580,25 @@ class SessionManager {
551
580
  (0, session_prefs_1.setSessionPrefs)(sessionId, { bypassAllPermissions: false });
552
581
  if (!session.planMode) {
553
582
  this.sendPermissionMode(session, sessionId, "default");
583
+ this.scheduleRespawnForPermissions(session);
554
584
  }
555
585
  this.emitSystem(session, sessionId, "__bypass_state::off");
556
586
  }
587
+ // Runtime set_permission_mode is unreliable when the CLI was spawned without
588
+ // the target mode. Respawning the process picks up --permission-mode from
589
+ // session state, guaranteeing the next message runs in the right mode.
590
+ // If a message is in flight, defer until message_done so we don't orphan it.
591
+ scheduleRespawnForPermissions(session) {
592
+ if (!session.process)
593
+ return;
594
+ if (session.info.status === "idle") {
595
+ this.killProcess(session);
596
+ session.hasSpawnedBefore = (0, transcript_1.transcriptExists)(session.cliSessionId, session.info.cwd);
597
+ }
598
+ else {
599
+ session.needsRespawnForPermissions = true;
600
+ }
601
+ }
557
602
  isBypassActive(sessionId) {
558
603
  const session = this.sessions.get(sessionId);
559
604
  return session?.bypassAllPermissions ?? false;
@@ -574,6 +619,7 @@ class SessionManager {
574
619
  }
575
620
  // Clear orphaned pending requests from the killed process
576
621
  session.pendingRequests.clear();
622
+ this.notifyPendingChanged(session, sessionId);
577
623
  this.emitSystem(session, sessionId, "__plan_state::on");
578
624
  }
579
625
  clearPlanMode(sessionId) {
@@ -591,6 +637,7 @@ class SessionManager {
591
637
  }
592
638
  // Clear orphaned pending requests from the killed process
593
639
  session.pendingRequests.clear();
640
+ this.notifyPendingChanged(session, sessionId);
594
641
  this.emitSystem(session, sessionId, "__plan_state::off");
595
642
  // Re-sync bypass state with the client so the UI reflects it correctly
596
643
  // after the plan-mode process is torn down.
@@ -968,6 +1015,13 @@ class SessionManager {
968
1015
  emitSystem(session, sessionId, text) {
969
1016
  session.emitter.emit("system", sessionId, text);
970
1017
  }
1018
+ notifyPendingChanged(session, sessionId) {
1019
+ const count = session.pendingRequests.size;
1020
+ if (session.info.pendingRequestCount === count)
1021
+ return;
1022
+ session.info.pendingRequestCount = count;
1023
+ session.emitter.emit("pending", sessionId, count);
1024
+ }
971
1025
  applyProcessedResult(session, sessionId, result) {
972
1026
  for (const msg of result.intermediateMessages) {
973
1027
  session.emitter.emit("event", sessionId, { type: "message_done", message: msg });
@@ -1008,6 +1062,12 @@ class SessionManager {
1008
1062
  else if (pa.type === "auto_deny") {
1009
1063
  this.respondToPermission(sessionId, pa.requestId, false, undefined, undefined, pa.denyReason);
1010
1064
  }
1065
+ else if (session.bypassAllPermissions && !session.planMode) {
1066
+ // CLI was spawned without bypass capability (e.g. after exiting plan
1067
+ // mode) but the session has bypass enabled. Auto-approve server-side
1068
+ // until the process respawns with the right flags.
1069
+ this.respondToPermission(sessionId, pa.requestId, true, pa.rawToolInput);
1070
+ }
1011
1071
  else {
1012
1072
  const planPath = pa.toolName === "ExitPlanMode" ? (0, plans_1.findLatestPlanFile)() : undefined;
1013
1073
  session.pendingRequests.set(pa.requestId, {
@@ -1016,9 +1076,11 @@ class SessionManager {
1016
1076
  toolName: pa.toolName,
1017
1077
  toolInput: pa.toolInput || "",
1018
1078
  rawToolInput: pa.rawToolInput,
1079
+ permissionSuggestions: pa.permissionSuggestions,
1019
1080
  planFilePath: planPath,
1020
1081
  planContent: planPath ? (0, plans_1.readPlanFile)(planPath) : undefined,
1021
1082
  });
1083
+ this.notifyPendingChanged(session, sessionId);
1022
1084
  }
1023
1085
  }
1024
1086
  if (result.compactDone) {
@@ -1197,6 +1259,27 @@ Additional Cockpit rules beyond the CLI's defaults:
1197
1259
  smLog(id, `recovery succeeded: restored from ${cwd}`);
1198
1260
  return true;
1199
1261
  }
1262
+ estimateMessageTokens(text, images, documents) {
1263
+ let tokens = Math.ceil(text.length / 4);
1264
+ if (images)
1265
+ tokens += images.length * 2000;
1266
+ if (documents)
1267
+ tokens += documents.reduce((sum, d) => sum + Math.ceil(d.data.length / 5), 0);
1268
+ return tokens;
1269
+ }
1270
+ shouldPreCompact(session, text, images, documents) {
1271
+ if (!session.contextUsage)
1272
+ return false;
1273
+ if (session.compacting)
1274
+ return false;
1275
+ if (text.trim().toLowerCase().startsWith("/compact"))
1276
+ return false;
1277
+ if (text.trim().startsWith("/"))
1278
+ return false;
1279
+ const estimate = this.estimateMessageTokens(text, images, documents);
1280
+ const { used, total } = session.contextUsage;
1281
+ return used + estimate > total * 0.85;
1282
+ }
1200
1283
  sendMessage(sessionId, text, images, documents) {
1201
1284
  const session = this.sessions.get(sessionId);
1202
1285
  if (!session) {
@@ -1214,6 +1297,26 @@ Additional Cockpit rules beyond the CLI's defaults:
1214
1297
  this.emitSystem(session, sessionId, "__compact::start");
1215
1298
  }
1216
1299
  }
1300
+ // If the message would likely overflow the context window, compact first
1301
+ // and queue the message for delivery after compaction finishes.
1302
+ if (session.info.status !== "running" && this.shouldPreCompact(session, text, images, documents)) {
1303
+ this.log(sessionId, "pre-send compact: message would exceed 85% of context window");
1304
+ (0, debug_logger_1.logDiag)(sessionId, "compact:pre-send");
1305
+ session.queuedMessages.push({ id: `q-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`, text, images, documents });
1306
+ session.emitter.emit("queued", sessionId, session.queuedMessages.length);
1307
+ session.compacting = true;
1308
+ this.emitSystem(session, sessionId, "__compact::start");
1309
+ session.info.status = "running";
1310
+ session.emitter.emit("status", sessionId, "running");
1311
+ if (session.process && session.stdin) {
1312
+ const compactInput = { type: "user", message: { role: "user", content: "/compact" } };
1313
+ session.stdin.write(JSON.stringify(compactInput) + "\n");
1314
+ }
1315
+ else {
1316
+ this.spawnProcess(session, sessionId, "/compact");
1317
+ }
1318
+ return true;
1319
+ }
1217
1320
  const content = this.buildContent(session, text, images, documents);
1218
1321
  // If queue was paused (user interrupted then sent a new message),
1219
1322
  // discard the paused messages and reset the flag.
@@ -4,12 +4,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.transcriptExists = transcriptExists;
7
+ exports.deleteTranscript = deleteTranscript;
8
+ exports.countTranscriptMessages = countTranscriptMessages;
7
9
  exports.readMoreLines = readMoreLines;
8
10
  exports.loadLastUsage = loadLastUsage;
9
11
  exports.loadTranscript = loadTranscript;
10
12
  exports.loadMoreMessages = loadMoreMessages;
11
13
  exports.findSessionCwd = findSessionCwd;
12
14
  exports.scanAllSessions = scanAllSessions;
15
+ exports.scanSessionsForCwd = scanSessionsForCwd;
16
+ exports.scanSessionsByIds = scanSessionsByIds;
17
+ exports.listAllTranscriptFiles = listAllTranscriptFiles;
18
+ exports.globalSearch = globalSearch;
13
19
  const node_fs_1 = require("node:fs");
14
20
  const promises_1 = require("node:fs/promises");
15
21
  const node_os_1 = require("node:os");
@@ -24,6 +30,31 @@ function getTranscriptPath(sessionId, cwd) {
24
30
  function transcriptExists(sessionId, cwd) {
25
31
  return (0, node_fs_1.existsSync)(getTranscriptPath(sessionId, cwd));
26
32
  }
33
+ async function deleteTranscript(sessionId, cwd) {
34
+ const fp = getTranscriptPath(sessionId, cwd);
35
+ if (!(0, node_fs_1.existsSync)(fp))
36
+ return false;
37
+ await (0, promises_1.unlink)(fp);
38
+ return true;
39
+ }
40
+ function countTranscriptMessages(sessionId, cwd) {
41
+ const fp = getTranscriptPath(sessionId, cwd);
42
+ if (!(0, node_fs_1.existsSync)(fp))
43
+ return 0;
44
+ try {
45
+ const raw = (0, node_fs_1.readFileSync)(fp, "utf-8");
46
+ let count = 0;
47
+ for (const line of raw.split("\n")) {
48
+ if (line.includes('"role"') && (line.includes('"assistant"') || line.includes('"user"'))) {
49
+ count++;
50
+ }
51
+ }
52
+ return count;
53
+ }
54
+ catch {
55
+ return 0;
56
+ }
57
+ }
27
58
  const CLI_XML_RE = /<(?:task-notification|local-command-caveat|local-command-stdout|system-reminder)[^>]*>[\s\S]*?<\/(?:task-notification|local-command-caveat|local-command-stdout|system-reminder)>[\s\S]*/g;
28
59
  const FILE_TAG_RE = /<file\s+path="([^"]+)">\n([\s\S]*?)\n<\/file>/g;
29
60
  function extractTextFiles(text) {
@@ -106,9 +137,6 @@ async function readTailLines(filePath, targetCount) {
106
137
  }
107
138
  // Not enough lines, double chunk and retry
108
139
  chunkSize *= 2;
109
- if (chunkSize >= totalSize) {
110
- return { lines, byteOffset: 0, totalSize };
111
- }
112
140
  }
113
141
  }
114
142
  finally {
@@ -154,9 +182,6 @@ async function readMoreLines(filePath, byteOffset, targetCount) {
154
182
  return { lines: result, newByteOffset: offset === 0 ? 0 : newByteOffset };
155
183
  }
156
184
  chunkSize *= 2;
157
- if (chunkSize >= byteOffset) {
158
- return { lines, newByteOffset: 0 };
159
- }
160
185
  }
161
186
  }
162
187
  finally {
@@ -646,6 +671,7 @@ async function scanAllSessions() {
646
671
  cwd,
647
672
  dirName: node_path_1.default.basename(cwd) || cwd,
648
673
  sessions,
674
+ totalSessionCount: sessions.length,
649
675
  });
650
676
  }
651
677
  result.sort((a, b) => {
@@ -655,3 +681,242 @@ async function scanAllSessions() {
655
681
  });
656
682
  return result;
657
683
  }
684
+ function metaToSessionInfo(meta) {
685
+ return {
686
+ id: meta.id,
687
+ name: meta.title,
688
+ cwd: meta.cwd,
689
+ createdAt: meta.createdAt,
690
+ lastActiveAt: meta.lastActiveAt,
691
+ status: "idle",
692
+ };
693
+ }
694
+ async function scanSessionsForCwd(targetCwd) {
695
+ const projectsDir = node_path_1.default.join((0, node_os_1.homedir)(), ".claude", "projects");
696
+ if (!(0, node_fs_1.existsSync)(projectsDir))
697
+ return [];
698
+ let projectDirs;
699
+ try {
700
+ projectDirs = await (0, promises_1.readdir)(projectsDir);
701
+ }
702
+ catch {
703
+ return [];
704
+ }
705
+ const results = [];
706
+ for (const dir of projectDirs) {
707
+ const dirPath = node_path_1.default.join(projectsDir, dir);
708
+ let files;
709
+ try {
710
+ files = await (0, promises_1.readdir)(dirPath);
711
+ }
712
+ catch {
713
+ continue;
714
+ }
715
+ const jsonlFiles = files.filter((f) => f.endsWith(".jsonl"));
716
+ const metas = await Promise.all(jsonlFiles.map((f) => extractSessionMeta(node_path_1.default.join(dirPath, f))));
717
+ for (const meta of metas) {
718
+ if (meta && meta.cwd === targetCwd) {
719
+ results.push(metaToSessionInfo(meta));
720
+ }
721
+ }
722
+ }
723
+ results.sort((a, b) => b.lastActiveAt - a.lastActiveAt);
724
+ return results;
725
+ }
726
+ async function scanSessionsByIds(ids) {
727
+ if (ids.length === 0)
728
+ return [];
729
+ const projectsDir = node_path_1.default.join((0, node_os_1.homedir)(), ".claude", "projects");
730
+ if (!(0, node_fs_1.existsSync)(projectsDir))
731
+ return [];
732
+ let projectDirs;
733
+ try {
734
+ projectDirs = await (0, promises_1.readdir)(projectsDir);
735
+ }
736
+ catch {
737
+ return [];
738
+ }
739
+ const idSet = new Set(ids);
740
+ const results = [];
741
+ for (const dir of projectDirs) {
742
+ if (idSet.size === 0)
743
+ break;
744
+ const dirPath = node_path_1.default.join(projectsDir, dir);
745
+ let files;
746
+ try {
747
+ files = await (0, promises_1.readdir)(dirPath);
748
+ }
749
+ catch {
750
+ continue;
751
+ }
752
+ const matching = files.filter((f) => f.endsWith(".jsonl") && idSet.has(f.slice(0, -".jsonl".length)));
753
+ if (matching.length === 0)
754
+ continue;
755
+ const metas = await Promise.all(matching.map((f) => extractSessionMeta(node_path_1.default.join(dirPath, f))));
756
+ for (const meta of metas) {
757
+ if (meta) {
758
+ results.push(metaToSessionInfo(meta));
759
+ idSet.delete(meta.id);
760
+ }
761
+ }
762
+ }
763
+ return results;
764
+ }
765
+ async function listAllTranscriptFiles() {
766
+ const projectsDir = node_path_1.default.join((0, node_os_1.homedir)(), ".claude", "projects");
767
+ if (!(0, node_fs_1.existsSync)(projectsDir))
768
+ return [];
769
+ let projectDirs;
770
+ try {
771
+ projectDirs = await (0, promises_1.readdir)(projectsDir);
772
+ }
773
+ catch {
774
+ return [];
775
+ }
776
+ const results = [];
777
+ for (const dir of projectDirs) {
778
+ if (dir.includes(".cockpit"))
779
+ continue;
780
+ const dirPath = node_path_1.default.join(projectsDir, dir);
781
+ let files;
782
+ try {
783
+ files = await (0, promises_1.readdir)(dirPath);
784
+ }
785
+ catch {
786
+ continue;
787
+ }
788
+ for (const f of files) {
789
+ if (!f.endsWith(".jsonl"))
790
+ continue;
791
+ const filePath = node_path_1.default.join(dirPath, f);
792
+ try {
793
+ const s = await (0, promises_1.stat)(filePath);
794
+ results.push({ filePath, sessionId: f.slice(0, -6), mtimeMs: s.mtimeMs });
795
+ }
796
+ catch { }
797
+ }
798
+ }
799
+ results.sort((a, b) => b.mtimeMs - a.mtimeMs);
800
+ return results;
801
+ }
802
+ async function globalSearch(query, limit, offset = 0) {
803
+ const MAX_FILES = 500;
804
+ const MAX_PARSED_BASE = 30;
805
+ const MAX_PER_FILE = 10;
806
+ const effectiveLimit = Math.min(limit, 100);
807
+ const lowerQuery = query.toLowerCase();
808
+ // When paginating, allow parsing more files to reach the offset
809
+ const maxParsed = MAX_PARSED_BASE + Math.ceil(offset / MAX_PER_FILE);
810
+ const files = await listAllTranscriptFiles();
811
+ const searchFiles = files.slice(0, MAX_FILES);
812
+ const results = [];
813
+ let totalFound = 0;
814
+ let filesParsed = 0;
815
+ let truncated = false;
816
+ for (const file of searchFiles) {
817
+ if (results.length >= effectiveLimit || filesParsed >= maxParsed) {
818
+ truncated = true;
819
+ break;
820
+ }
821
+ let raw;
822
+ try {
823
+ raw = await (0, promises_1.readFile)(file.filePath, "utf-8");
824
+ }
825
+ catch {
826
+ continue;
827
+ }
828
+ if (!raw.toLowerCase().includes(lowerQuery))
829
+ continue;
830
+ filesParsed++;
831
+ const lines = raw.split(/\r?\n/).filter((l) => l.trim());
832
+ const { messages } = parseLines(lines);
833
+ let cwd = "";
834
+ let sessionTitle = "";
835
+ for (let j = 0; j < Math.min(lines.length, 50); j++) {
836
+ try {
837
+ const entry = JSON.parse(lines[j]);
838
+ if (entry.type === "user" && entry.cwd && !cwd)
839
+ cwd = entry.cwd;
840
+ if (entry.type === "user" && entry.message && !sessionTitle) {
841
+ const content = entry.message.content;
842
+ let candidate = "";
843
+ if (typeof content === "string")
844
+ candidate = content;
845
+ else if (Array.isArray(content)) {
846
+ const tb = content.find((b) => b.type === "text" && b.text);
847
+ if (tb?.text)
848
+ candidate = tb.text;
849
+ }
850
+ if (candidate && !candidate.startsWith("[") && !candidate.startsWith("<")) {
851
+ sessionTitle = candidate.slice(0, 120);
852
+ }
853
+ }
854
+ if (cwd && sessionTitle)
855
+ break;
856
+ }
857
+ catch { }
858
+ }
859
+ if (!cwd)
860
+ continue;
861
+ if (cwd.endsWith(".cockpit/reviews") || cwd.endsWith(".cockpit/jobs"))
862
+ continue;
863
+ const dirName = node_path_1.default.basename(cwd) || cwd;
864
+ let fileResults = 0;
865
+ for (let i = 0; i < messages.length; i++) {
866
+ if (fileResults >= MAX_PER_FILE || results.length >= effectiveLimit)
867
+ break;
868
+ const msg = messages[i];
869
+ if (msg.role !== "user" && msg.role !== "assistant")
870
+ continue;
871
+ if (i > 0 && messages[i - 1].content === "__compacted__")
872
+ continue;
873
+ if (i > 1 && messages[i - 2].content === "__compacted__")
874
+ continue;
875
+ let text = "";
876
+ if (msg.blocks && msg.blocks.length > 0) {
877
+ text = msg.blocks
878
+ .filter((b) => b.type === "text")
879
+ .map((b) => b.text)
880
+ .join("\n");
881
+ }
882
+ if (!text && typeof msg.content === "string") {
883
+ text = msg.content;
884
+ }
885
+ if (!text)
886
+ continue;
887
+ const matchIndex = text.toLowerCase().indexOf(lowerQuery);
888
+ if (matchIndex === -1)
889
+ continue;
890
+ totalFound++;
891
+ fileResults++;
892
+ if (totalFound <= offset)
893
+ continue;
894
+ const previewStart = Math.max(0, matchIndex - 100);
895
+ const previewEnd = Math.min(text.length, matchIndex + query.length + 100);
896
+ let preview = text.slice(previewStart, previewEnd);
897
+ let matchStart = matchIndex - previewStart;
898
+ if (previewStart > 0) {
899
+ preview = "..." + preview;
900
+ matchStart += 3;
901
+ }
902
+ if (previewEnd < text.length) {
903
+ preview = preview + "...";
904
+ }
905
+ results.push({
906
+ sessionId: file.sessionId,
907
+ sessionName: sessionTitle || "Untitled session",
908
+ cwd,
909
+ dirName,
910
+ messageId: msg.id,
911
+ role: msg.role,
912
+ timestamp: msg.timestamp,
913
+ preview,
914
+ matchStart,
915
+ matchLength: query.length,
916
+ fullContent: text.length > 2000 ? text.slice(0, 2000) + "..." : text,
917
+ });
918
+ }
919
+ }
920
+ results.sort((a, b) => b.timestamp - a.timestamp);
921
+ return { results, totalFilesSearched: searchFiles.length, truncated };
922
+ }