@surething/cockpit 1.0.275 → 1.0.276

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 (711) hide show
  1. package/.next-prod/BUILD_ID +1 -1
  2. package/.next-prod/app-path-routes-manifest.json +3 -1
  3. package/.next-prod/build-manifest.json +2 -2
  4. package/.next-prod/cockpit-build.json +1 -1
  5. package/.next-prod/prerender-manifest.json +4 -4
  6. package/.next-prod/routes-manifest.json +14 -0
  7. package/.next-prod/server/app/_global-error/page.js +2 -2
  8. package/.next-prod/server/app/_global-error/page.js.nft.json +1 -1
  9. package/.next-prod/server/app/_global-error/page_client-reference-manifest.js +1 -1
  10. package/.next-prod/server/app/_global-error.html +1 -1
  11. package/.next-prod/server/app/_global-error.rsc +1 -1
  12. package/.next-prod/server/app/_global-error.segments/_full.segment.rsc +1 -1
  13. package/.next-prod/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  14. package/.next-prod/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  15. package/.next-prod/server/app/_not-found/page.js +1 -1
  16. package/.next-prod/server/app/_not-found/page.js.nft.json +1 -1
  17. package/.next-prod/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/.next-prod/server/app/_not-found.html +2 -2
  19. package/.next-prod/server/app/_not-found.rsc +3 -3
  20. package/.next-prod/server/app/_not-found.segments/_full.segment.rsc +3 -3
  21. package/.next-prod/server/app/_not-found.segments/_index.segment.rsc +3 -3
  22. package/.next-prod/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  23. package/.next-prod/server/app/_not-found.segments/_tree.segment.rsc +2 -2
  24. package/.next-prod/server/app/api/agent/test/route.js +1 -1
  25. package/.next-prod/server/app/api/agent/test/route.js.nft.json +1 -1
  26. package/.next-prod/server/app/api/bash/route.js +1 -1
  27. package/.next-prod/server/app/api/bash/route.js.nft.json +1 -1
  28. package/.next-prod/server/app/api/bots/[id]/route.js +1 -0
  29. package/.next-prod/server/app/api/bots/[id]/route.js.nft.json +1 -0
  30. package/.next-prod/server/app/api/bots/[id]/route_client-reference-manifest.js +1 -0
  31. package/.next-prod/server/app/api/bots/route.js +1 -0
  32. package/.next-prod/server/app/api/bots/route.js.nft.json +1 -0
  33. package/.next-prod/server/app/api/bots/route_client-reference-manifest.js +1 -0
  34. package/.next-prod/server/app/api/chat/codex/route.js +1 -1
  35. package/.next-prod/server/app/api/chat/codex/route.js.nft.json +1 -1
  36. package/.next-prod/server/app/api/chat/deepseek/route.js +1 -1
  37. package/.next-prod/server/app/api/chat/deepseek/route.js.nft.json +1 -1
  38. package/.next-prod/server/app/api/chat/glm/route.js +1 -1
  39. package/.next-prod/server/app/api/chat/glm/route.js.nft.json +1 -1
  40. package/.next-prod/server/app/api/chat/kimi/route.js +1 -1
  41. package/.next-prod/server/app/api/chat/kimi/route.js.nft.json +1 -1
  42. package/.next-prod/server/app/api/chat/ollama/route.js +1 -1
  43. package/.next-prod/server/app/api/chat/ollama/route.js.nft.json +1 -1
  44. package/.next-prod/server/app/api/chat/route.js +1 -1
  45. package/.next-prod/server/app/api/chat/route.js.nft.json +1 -1
  46. package/.next-prod/server/app/api/chat/stop/route.js +1 -1
  47. package/.next-prod/server/app/api/chat/stop/route.js.nft.json +1 -1
  48. package/.next-prod/server/app/api/claude-stats/route.js +1 -1
  49. package/.next-prod/server/app/api/claude-stats/route.js.nft.json +1 -1
  50. package/.next-prod/server/app/api/commands/route.js +1 -1
  51. package/.next-prod/server/app/api/commands/route.js.nft.json +1 -1
  52. package/.next-prod/server/app/api/comments/route.js +1 -1
  53. package/.next-prod/server/app/api/comments/route.js.nft.json +1 -1
  54. package/.next-prod/server/app/api/db/columns/route.js +2 -2
  55. package/.next-prod/server/app/api/db/columns/route.js.nft.json +1 -1
  56. package/.next-prod/server/app/api/db/connect/route.js +1 -1
  57. package/.next-prod/server/app/api/db/connect/route.js.nft.json +1 -1
  58. package/.next-prod/server/app/api/db/disconnect/route.js +1 -1
  59. package/.next-prod/server/app/api/db/disconnect/route.js.nft.json +1 -1
  60. package/.next-prod/server/app/api/db/export/route.js +1 -1
  61. package/.next-prod/server/app/api/db/export/route.js.nft.json +1 -1
  62. package/.next-prod/server/app/api/db/query/route.js +1 -1
  63. package/.next-prod/server/app/api/db/query/route.js.nft.json +1 -1
  64. package/.next-prod/server/app/api/db/schemas/route.js +1 -1
  65. package/.next-prod/server/app/api/db/schemas/route.js.nft.json +1 -1
  66. package/.next-prod/server/app/api/deepseek/balance/route.js +1 -1
  67. package/.next-prod/server/app/api/deepseek/balance/route.js.nft.json +1 -1
  68. package/.next-prod/server/app/api/deepseek/credentials/route.js +1 -1
  69. package/.next-prod/server/app/api/deepseek/credentials/route.js.nft.json +1 -1
  70. package/.next-prod/server/app/api/deepseek/models/route.js +1 -1
  71. package/.next-prod/server/app/api/deepseek/models/route.js.nft.json +1 -1
  72. package/.next-prod/server/app/api/dev/spans/route.js +1 -1
  73. package/.next-prod/server/app/api/dev/spans/route.js.nft.json +1 -1
  74. package/.next-prod/server/app/api/extension/version/route.js +1 -1
  75. package/.next-prod/server/app/api/extension/version/route.js.nft.json +1 -1
  76. package/.next-prod/server/app/api/file/route.js +1 -1
  77. package/.next-prod/server/app/api/file/route.js.nft.json +1 -1
  78. package/.next-prod/server/app/api/files/blame/route.js +1 -1
  79. package/.next-prod/server/app/api/files/blame/route.js.nft.json +1 -1
  80. package/.next-prod/server/app/api/files/clipboard/route.js +1 -1
  81. package/.next-prod/server/app/api/files/clipboard/route.js.nft.json +1 -1
  82. package/.next-prod/server/app/api/files/copy/route.js +1 -1
  83. package/.next-prod/server/app/api/files/copy/route.js.nft.json +1 -1
  84. package/.next-prod/server/app/api/files/delete/route.js +1 -1
  85. package/.next-prod/server/app/api/files/delete/route.js.nft.json +1 -1
  86. package/.next-prod/server/app/api/files/expanded/route.js +1 -1
  87. package/.next-prod/server/app/api/files/expanded/route.js.nft.json +1 -1
  88. package/.next-prod/server/app/api/files/index/route.js +1 -1
  89. package/.next-prod/server/app/api/files/index/route.js.nft.json +1 -1
  90. package/.next-prod/server/app/api/files/init/route.js +1 -1
  91. package/.next-prod/server/app/api/files/init/route.js.nft.json +1 -1
  92. package/.next-prod/server/app/api/files/paste/route.js +1 -1
  93. package/.next-prod/server/app/api/files/paste/route.js.nft.json +1 -1
  94. package/.next-prod/server/app/api/files/read/route.js +1 -1
  95. package/.next-prod/server/app/api/files/read/route.js.nft.json +1 -1
  96. package/.next-prod/server/app/api/files/readdir/route.js +1 -1
  97. package/.next-prod/server/app/api/files/readdir/route.js.nft.json +1 -1
  98. package/.next-prod/server/app/api/files/recent/route.js +1 -1
  99. package/.next-prod/server/app/api/files/recent/route.js.nft.json +1 -1
  100. package/.next-prod/server/app/api/files/save/route.js +1 -1
  101. package/.next-prod/server/app/api/files/save/route.js.nft.json +1 -1
  102. package/.next-prod/server/app/api/files/search/route.js +1 -1
  103. package/.next-prod/server/app/api/files/search/route.js.nft.json +1 -1
  104. package/.next-prod/server/app/api/files/stat/route.js +1 -1
  105. package/.next-prod/server/app/api/files/stat/route.js.nft.json +1 -1
  106. package/.next-prod/server/app/api/files/text/route.js +1 -1
  107. package/.next-prod/server/app/api/files/text/route.js.nft.json +1 -1
  108. package/.next-prod/server/app/api/git/blob/route.js +1 -1
  109. package/.next-prod/server/app/api/git/blob/route.js.nft.json +1 -1
  110. package/.next-prod/server/app/api/git/branch-diff/route.js +1 -1
  111. package/.next-prod/server/app/api/git/branch-diff/route.js.nft.json +1 -1
  112. package/.next-prod/server/app/api/git/branches/route.js +1 -1
  113. package/.next-prod/server/app/api/git/branches/route.js.nft.json +1 -1
  114. package/.next-prod/server/app/api/git/commit-diff/route.js +1 -1
  115. package/.next-prod/server/app/api/git/commit-diff/route.js.nft.json +1 -1
  116. package/.next-prod/server/app/api/git/commits/route.js +1 -1
  117. package/.next-prod/server/app/api/git/commits/route.js.nft.json +1 -1
  118. package/.next-prod/server/app/api/git/current-branch/route.js +1 -1
  119. package/.next-prod/server/app/api/git/current-branch/route.js.nft.json +1 -1
  120. package/.next-prod/server/app/api/git/diff/route.js +1 -1
  121. package/.next-prod/server/app/api/git/diff/route.js.nft.json +1 -1
  122. package/.next-prod/server/app/api/git/discard/route.js +1 -1
  123. package/.next-prod/server/app/api/git/discard/route.js.nft.json +1 -1
  124. package/.next-prod/server/app/api/git/stage/route.js +1 -1
  125. package/.next-prod/server/app/api/git/stage/route.js.nft.json +1 -1
  126. package/.next-prod/server/app/api/git/status/route.js +1 -1
  127. package/.next-prod/server/app/api/git/status/route.js.nft.json +1 -1
  128. package/.next-prod/server/app/api/git/unstage/route.js +1 -1
  129. package/.next-prod/server/app/api/git/unstage/route.js.nft.json +1 -1
  130. package/.next-prod/server/app/api/git/worktree/route.js +1 -1
  131. package/.next-prod/server/app/api/git/worktree/route.js.nft.json +1 -1
  132. package/.next-prod/server/app/api/glm/credentials/route.js +1 -1
  133. package/.next-prod/server/app/api/glm/credentials/route.js.nft.json +1 -1
  134. package/.next-prod/server/app/api/glm/models/route.js +1 -1
  135. package/.next-prod/server/app/api/glm/models/route.js.nft.json +1 -1
  136. package/.next-prod/server/app/api/glm/usage/route.js +1 -1
  137. package/.next-prod/server/app/api/glm/usage/route.js.nft.json +1 -1
  138. package/.next-prod/server/app/api/global-state/route.js +2 -2
  139. package/.next-prod/server/app/api/global-state/route.js.nft.json +1 -1
  140. package/.next-prod/server/app/api/health/route.js +1 -1
  141. package/.next-prod/server/app/api/health/route.js.nft.json +1 -1
  142. package/.next-prod/server/app/api/html-apps/[id]/route.js +1 -1
  143. package/.next-prod/server/app/api/html-apps/[id]/route.js.nft.json +1 -1
  144. package/.next-prod/server/app/api/html-apps/route.js +1 -1
  145. package/.next-prod/server/app/api/html-apps/route.js.nft.json +1 -1
  146. package/.next-prod/server/app/api/instructions/config/route.js +1 -1
  147. package/.next-prod/server/app/api/instructions/config/route.js.nft.json +1 -1
  148. package/.next-prod/server/app/api/kimi/credentials/route.js +1 -1
  149. package/.next-prod/server/app/api/kimi/credentials/route.js.nft.json +1 -1
  150. package/.next-prod/server/app/api/kimi/models/route.js +1 -1
  151. package/.next-prod/server/app/api/kimi/models/route.js.nft.json +1 -1
  152. package/.next-prod/server/app/api/kimi/usage/route.js +1 -1
  153. package/.next-prod/server/app/api/kimi/usage/route.js.nft.json +1 -1
  154. package/.next-prod/server/app/api/lsp/definition/route.js +1 -1
  155. package/.next-prod/server/app/api/lsp/definition/route.js.nft.json +1 -1
  156. package/.next-prod/server/app/api/lsp/hover/route.js +1 -1
  157. package/.next-prod/server/app/api/lsp/hover/route.js.nft.json +1 -1
  158. package/.next-prod/server/app/api/lsp/references/route.js +1 -1
  159. package/.next-prod/server/app/api/lsp/references/route.js.nft.json +1 -1
  160. package/.next-prod/server/app/api/lsp/status/route.js +1 -1
  161. package/.next-prod/server/app/api/lsp/status/route.js.nft.json +1 -1
  162. package/.next-prod/server/app/api/lsp/warmup/route.js +1 -1
  163. package/.next-prod/server/app/api/lsp/warmup/route.js.nft.json +1 -1
  164. package/.next-prod/server/app/api/mysql/columns/route.js +1 -1
  165. package/.next-prod/server/app/api/mysql/columns/route.js.nft.json +1 -1
  166. package/.next-prod/server/app/api/mysql/connect/route.js +1 -1
  167. package/.next-prod/server/app/api/mysql/connect/route.js.nft.json +1 -1
  168. package/.next-prod/server/app/api/mysql/disconnect/route.js +1 -1
  169. package/.next-prod/server/app/api/mysql/disconnect/route.js.nft.json +1 -1
  170. package/.next-prod/server/app/api/mysql/export/route.js +1 -1
  171. package/.next-prod/server/app/api/mysql/export/route.js.nft.json +1 -1
  172. package/.next-prod/server/app/api/mysql/query/route.js +1 -1
  173. package/.next-prod/server/app/api/mysql/query/route.js.nft.json +1 -1
  174. package/.next-prod/server/app/api/mysql/schemas/route.js +1 -1
  175. package/.next-prod/server/app/api/mysql/schemas/route.js.nft.json +1 -1
  176. package/.next-prod/server/app/api/neo4j/connect/route.js +1 -1
  177. package/.next-prod/server/app/api/neo4j/connect/route.js.nft.json +1 -1
  178. package/.next-prod/server/app/api/neo4j/disconnect/route.js +1 -1
  179. package/.next-prod/server/app/api/neo4j/disconnect/route.js.nft.json +1 -1
  180. package/.next-prod/server/app/api/neo4j/query/route.js +1 -1
  181. package/.next-prod/server/app/api/neo4j/query/route.js.nft.json +1 -1
  182. package/.next-prod/server/app/api/neo4j/schema/route.js +1 -1
  183. package/.next-prod/server/app/api/neo4j/schema/route.js.nft.json +1 -1
  184. package/.next-prod/server/app/api/note/route.js +1 -1
  185. package/.next-prod/server/app/api/note/route.js.nft.json +1 -1
  186. package/.next-prod/server/app/api/ollama/config/route.js +1 -1
  187. package/.next-prod/server/app/api/ollama/config/route.js.nft.json +1 -1
  188. package/.next-prod/server/app/api/ollama/models/route.js +1 -1
  189. package/.next-prod/server/app/api/ollama/models/route.js.nft.json +1 -1
  190. package/.next-prod/server/app/api/ollama/start/route.js +1 -1
  191. package/.next-prod/server/app/api/ollama/start/route.js.nft.json +1 -1
  192. package/.next-prod/server/app/api/open-cursor/route.js +1 -1
  193. package/.next-prod/server/app/api/open-cursor/route.js.nft.json +1 -1
  194. package/.next-prod/server/app/api/open-vscode/route.js +1 -1
  195. package/.next-prod/server/app/api/open-vscode/route.js.nft.json +1 -1
  196. package/.next-prod/server/app/api/pick-folder/route.js +1 -1
  197. package/.next-prod/server/app/api/pick-folder/route.js.nft.json +1 -1
  198. package/.next-prod/server/app/api/pinned-sessions/route.js +1 -1
  199. package/.next-prod/server/app/api/pinned-sessions/route.js.nft.json +1 -1
  200. package/.next-prod/server/app/api/project-settings/route.js +1 -1
  201. package/.next-prod/server/app/api/project-settings/route.js.nft.json +1 -1
  202. package/.next-prod/server/app/api/project-state/route.js +2 -2
  203. package/.next-prod/server/app/api/project-state/route.js.nft.json +1 -1
  204. package/.next-prod/server/app/api/projectGraph/affected/route.js +1 -1
  205. package/.next-prod/server/app/api/projectGraph/affected/route.js.nft.json +1 -1
  206. package/.next-prod/server/app/api/projectGraph/callees/route.js +1 -1
  207. package/.next-prod/server/app/api/projectGraph/callees/route.js.nft.json +1 -1
  208. package/.next-prod/server/app/api/projectGraph/callers/route.js +1 -1
  209. package/.next-prod/server/app/api/projectGraph/callers/route.js.nft.json +1 -1
  210. package/.next-prod/server/app/api/projectGraph/coedit/route.js +1 -1
  211. package/.next-prod/server/app/api/projectGraph/coedit/route.js.nft.json +1 -1
  212. package/.next-prod/server/app/api/projectGraph/context/route.js +1 -1
  213. package/.next-prod/server/app/api/projectGraph/context/route.js.nft.json +1 -1
  214. package/.next-prod/server/app/api/projectGraph/file/route.js +1 -1
  215. package/.next-prod/server/app/api/projectGraph/file/route.js.nft.json +1 -1
  216. package/.next-prod/server/app/api/projectGraph/file-functions/route.js +1 -1
  217. package/.next-prod/server/app/api/projectGraph/file-functions/route.js.nft.json +1 -1
  218. package/.next-prod/server/app/api/projectGraph/impact/route.js +1 -1
  219. package/.next-prod/server/app/api/projectGraph/impact/route.js.nft.json +1 -1
  220. package/.next-prod/server/app/api/projectGraph/related/route.js +1 -1
  221. package/.next-prod/server/app/api/projectGraph/related/route.js.nft.json +1 -1
  222. package/.next-prod/server/app/api/projectGraph/risk/route.js +1 -1
  223. package/.next-prod/server/app/api/projectGraph/risk/route.js.nft.json +1 -1
  224. package/.next-prod/server/app/api/projectGraph/search/route.js +1 -1
  225. package/.next-prod/server/app/api/projectGraph/search/route.js.nft.json +1 -1
  226. package/.next-prod/server/app/api/projects/route.js +1 -1
  227. package/.next-prod/server/app/api/projects/route.js.nft.json +1 -1
  228. package/.next-prod/server/app/api/push/public-key/route.js +1 -1
  229. package/.next-prod/server/app/api/push/public-key/route.js.nft.json +1 -1
  230. package/.next-prod/server/app/api/push/subscribe/route.js +1 -1
  231. package/.next-prod/server/app/api/push/subscribe/route.js.nft.json +1 -1
  232. package/.next-prod/server/app/api/push/unsubscribe/route.js +1 -1
  233. package/.next-prod/server/app/api/push/unsubscribe/route.js.nft.json +1 -1
  234. package/.next-prod/server/app/api/redis/command/route.js +1 -1
  235. package/.next-prod/server/app/api/redis/command/route.js.nft.json +1 -1
  236. package/.next-prod/server/app/api/redis/connect/route.js +1 -1
  237. package/.next-prod/server/app/api/redis/connect/route.js.nft.json +1 -1
  238. package/.next-prod/server/app/api/redis/delete/route.js +1 -1
  239. package/.next-prod/server/app/api/redis/delete/route.js.nft.json +1 -1
  240. package/.next-prod/server/app/api/redis/disconnect/route.js +1 -1
  241. package/.next-prod/server/app/api/redis/disconnect/route.js.nft.json +1 -1
  242. package/.next-prod/server/app/api/redis/get/route.js +1 -1
  243. package/.next-prod/server/app/api/redis/get/route.js.nft.json +1 -1
  244. package/.next-prod/server/app/api/redis/keys/route.js +1 -1
  245. package/.next-prod/server/app/api/redis/keys/route.js.nft.json +1 -1
  246. package/.next-prod/server/app/api/redis/set/route.js +1 -1
  247. package/.next-prod/server/app/api/redis/set/route.js.nft.json +1 -1
  248. package/.next-prod/server/app/api/restart/route.js +1 -1
  249. package/.next-prod/server/app/api/restart/route.js.nft.json +1 -1
  250. package/.next-prod/server/app/api/review/[id]/comments/route.js +1 -1
  251. package/.next-prod/server/app/api/review/[id]/comments/route.js.nft.json +1 -1
  252. package/.next-prod/server/app/api/review/[id]/replies/route.js +1 -1
  253. package/.next-prod/server/app/api/review/[id]/replies/route.js.nft.json +1 -1
  254. package/.next-prod/server/app/api/review/[id]/route.js +1 -1
  255. package/.next-prod/server/app/api/review/[id]/route.js.nft.json +1 -1
  256. package/.next-prod/server/app/api/review/identify/route.js +1 -1
  257. package/.next-prod/server/app/api/review/identify/route.js.nft.json +1 -1
  258. package/.next-prod/server/app/api/review/order/route.js +1 -1
  259. package/.next-prod/server/app/api/review/order/route.js.nft.json +1 -1
  260. package/.next-prod/server/app/api/review/route.js +1 -1
  261. package/.next-prod/server/app/api/review/route.js.nft.json +1 -1
  262. package/.next-prod/server/app/api/review/share-info/route.js +1 -1
  263. package/.next-prod/server/app/api/review/share-info/route.js.nft.json +1 -1
  264. package/.next-prod/server/app/api/review/users/route.js +1 -1
  265. package/.next-prod/server/app/api/review/users/route.js.nft.json +1 -1
  266. package/.next-prod/server/app/api/scheduled-tasks/route.js +2 -2
  267. package/.next-prod/server/app/api/scheduled-tasks/route.js.nft.json +1 -1
  268. package/.next-prod/server/app/api/services/config/route.js +1 -1
  269. package/.next-prod/server/app/api/services/config/route.js.nft.json +1 -1
  270. package/.next-prod/server/app/api/services/scripts/route.js +1 -1
  271. package/.next-prod/server/app/api/services/scripts/route.js.nft.json +1 -1
  272. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js +1 -1
  273. package/.next-prod/server/app/api/session/[sessionId]/fork/route.js.nft.json +1 -1
  274. package/.next-prod/server/app/api/session/[sessionId]/history/route.js +1 -1
  275. package/.next-prod/server/app/api/session/[sessionId]/history/route.js.nft.json +1 -1
  276. package/.next-prod/server/app/api/session/[sessionId]/turn/route.js +2 -2
  277. package/.next-prod/server/app/api/session/[sessionId]/turn/route.js.nft.json +1 -1
  278. package/.next-prod/server/app/api/session/user-messages/route.js +1 -1
  279. package/.next-prod/server/app/api/session/user-messages/route.js.nft.json +1 -1
  280. package/.next-prod/server/app/api/session-by-path/route.js +1 -1
  281. package/.next-prod/server/app/api/session-by-path/route.js.nft.json +1 -1
  282. package/.next-prod/server/app/api/sessions/delegate/route.js +1 -1
  283. package/.next-prod/server/app/api/sessions/delegate/route.js.nft.json +1 -1
  284. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js +1 -1
  285. package/.next-prod/server/app/api/sessions/projects/[encodedPath]/route.js.nft.json +1 -1
  286. package/.next-prod/server/app/api/sessions/projects/route.js +1 -1
  287. package/.next-prod/server/app/api/sessions/projects/route.js.nft.json +1 -1
  288. package/.next-prod/server/app/api/sessions/route.js +1 -1
  289. package/.next-prod/server/app/api/sessions/route.js.nft.json +1 -1
  290. package/.next-prod/server/app/api/sessions/search/route.js +1 -1
  291. package/.next-prod/server/app/api/sessions/search/route.js.nft.json +1 -1
  292. package/.next-prod/server/app/api/sessions/status/route.js +1 -1
  293. package/.next-prod/server/app/api/sessions/status/route.js.nft.json +1 -1
  294. package/.next-prod/server/app/api/settings/route.js +1 -1
  295. package/.next-prod/server/app/api/settings/route.js.nft.json +1 -1
  296. package/.next-prod/server/app/api/shutdown/route.js +1 -1
  297. package/.next-prod/server/app/api/shutdown/route.js.nft.json +1 -1
  298. package/.next-prod/server/app/api/skills/[id]/route.js +1 -1
  299. package/.next-prod/server/app/api/skills/[id]/route.js.nft.json +1 -1
  300. package/.next-prod/server/app/api/skills/content/route.js +1 -1
  301. package/.next-prod/server/app/api/skills/content/route.js.nft.json +1 -1
  302. package/.next-prod/server/app/api/skills/route.js +1 -1
  303. package/.next-prod/server/app/api/skills/route.js.nft.json +1 -1
  304. package/.next-prod/server/app/api/snapshots/blob/route.js +1 -1
  305. package/.next-prod/server/app/api/snapshots/blob/route.js.nft.json +1 -1
  306. package/.next-prod/server/app/api/snapshots/diff/route.js +1 -1
  307. package/.next-prod/server/app/api/snapshots/diff/route.js.nft.json +1 -1
  308. package/.next-prod/server/app/api/snapshots/route.js +1 -1
  309. package/.next-prod/server/app/api/snapshots/route.js.nft.json +1 -1
  310. package/.next-prod/server/app/api/terminal/aliases/route.js +1 -1
  311. package/.next-prod/server/app/api/terminal/aliases/route.js.nft.json +1 -1
  312. package/.next-prod/server/app/api/terminal/autocomplete/route.js +1 -1
  313. package/.next-prod/server/app/api/terminal/autocomplete/route.js.nft.json +1 -1
  314. package/.next-prod/server/app/api/terminal/bubble-order/route.js +1 -1
  315. package/.next-prod/server/app/api/terminal/bubble-order/route.js.nft.json +1 -1
  316. package/.next-prod/server/app/api/terminal/env/route.js +1 -1
  317. package/.next-prod/server/app/api/terminal/env/route.js.nft.json +1 -1
  318. package/.next-prod/server/app/api/terminal/history/route.js +1 -1
  319. package/.next-prod/server/app/api/terminal/history/route.js.nft.json +1 -1
  320. package/.next-prod/server/app/api/update/route.js +1 -1
  321. package/.next-prod/server/app/api/update/route.js.nft.json +1 -1
  322. package/.next-prod/server/app/api/update-state/route.js +1 -1
  323. package/.next-prod/server/app/api/update-state/route.js.nft.json +1 -1
  324. package/.next-prod/server/app/api/version/route.js +1 -1
  325. package/.next-prod/server/app/api/version/route.js.nft.json +1 -1
  326. package/.next-prod/server/app/apps/[...path]/route.js +1 -1
  327. package/.next-prod/server/app/apps/[...path]/route.js.nft.json +1 -1
  328. package/.next-prod/server/app/favicon.ico/route.js +1 -1
  329. package/.next-prod/server/app/favicon.ico/route.js.nft.json +1 -1
  330. package/.next-prod/server/app/m/page.js +1 -1
  331. package/.next-prod/server/app/m/page.js.nft.json +1 -1
  332. package/.next-prod/server/app/m/page_client-reference-manifest.js +1 -1
  333. package/.next-prod/server/app/manifest.webmanifest/route.js +2 -2
  334. package/.next-prod/server/app/manifest.webmanifest/route.js.nft.json +1 -1
  335. package/.next-prod/server/app/page.js +1 -1
  336. package/.next-prod/server/app/page.js.nft.json +1 -1
  337. package/.next-prod/server/app/page_client-reference-manifest.js +1 -1
  338. package/.next-prod/server/app/project/page.js +1 -1
  339. package/.next-prod/server/app/project/page.js.nft.json +1 -1
  340. package/.next-prod/server/app/project/page_client-reference-manifest.js +1 -1
  341. package/.next-prod/server/app/review/[id]/page.js +1 -1
  342. package/.next-prod/server/app/review/[id]/page.js.nft.json +1 -1
  343. package/.next-prod/server/app/review/[id]/page_client-reference-manifest.js +1 -1
  344. package/.next-prod/server/app-paths-manifest.json +3 -1
  345. package/.next-prod/server/chunks/2493.js +13 -9
  346. package/.next-prod/server/chunks/{7956.js → 3354.js} +2 -2
  347. package/.next-prod/server/chunks/6495.js +1 -1
  348. package/.next-prod/server/chunks/6548.js +1 -1
  349. package/.next-prod/server/chunks/7438.js +764 -0
  350. package/.next-prod/server/chunks/{1653.js → 8022.js} +2 -2
  351. package/.next-prod/server/middleware-build-manifest.js +1 -1
  352. package/.next-prod/server/pages/404.html +2 -2
  353. package/.next-prod/server/pages/500.html +1 -1
  354. package/.next-prod/server/server-reference-manifest.json +1 -1
  355. package/.next-prod/static/O8neHUIr3dQhe1jcOUsQ8/_buildManifest.js +1 -0
  356. package/.next-prod/static/chunks/{103-1f50be74a00f89af.js → 50015-b81552adf20a6a33.js} +2 -2
  357. package/.next-prod/static/chunks/72539-049ac78fc767d177.js +17 -0
  358. package/.next-prod/static/chunks/89656-d9dd3a8559041236.js +34 -0
  359. package/.next-prod/static/chunks/99092-5b836813f4b1d4b3.js +716 -0
  360. package/.next-prod/static/chunks/app/_global-error/{page-b56c0b18a3b4d026.js → page-e2f146f38bb4df42.js} +1 -1
  361. package/.next-prod/static/chunks/app/api/agent/test/{route-b56c0b18a3b4d026.js → route-e2f146f38bb4df42.js} +1 -1
  362. package/.next-prod/static/chunks/app/api/bash/{route-b56c0b18a3b4d026.js → route-e2f146f38bb4df42.js} +1 -1
  363. package/.next-prod/static/chunks/app/api/{chat/codex/route-b56c0b18a3b4d026.js → bots/[id]/route-e2f146f38bb4df42.js} +1 -1
  364. package/.next-prod/static/chunks/app/api/bots/route-e2f146f38bb4df42.js +1 -0
  365. package/.next-prod/static/chunks/app/api/chat/codex/route-e2f146f38bb4df42.js +1 -0
  366. package/.next-prod/static/chunks/app/api/chat/deepseek/route-e2f146f38bb4df42.js +1 -0
  367. package/.next-prod/static/chunks/app/api/chat/glm/route-e2f146f38bb4df42.js +1 -0
  368. package/.next-prod/static/chunks/app/api/chat/kimi/route-e2f146f38bb4df42.js +1 -0
  369. package/.next-prod/static/chunks/app/api/chat/ollama/route-e2f146f38bb4df42.js +1 -0
  370. package/.next-prod/static/chunks/app/api/chat/route-e2f146f38bb4df42.js +1 -0
  371. package/.next-prod/static/chunks/app/api/chat/stop/route-e2f146f38bb4df42.js +1 -0
  372. package/.next-prod/static/chunks/app/api/claude-stats/route-e2f146f38bb4df42.js +1 -0
  373. package/.next-prod/static/chunks/app/api/commands/route-e2f146f38bb4df42.js +1 -0
  374. package/.next-prod/static/chunks/app/api/comments/route-e2f146f38bb4df42.js +1 -0
  375. package/.next-prod/static/chunks/app/api/db/columns/route-e2f146f38bb4df42.js +1 -0
  376. package/.next-prod/static/chunks/app/api/db/connect/route-e2f146f38bb4df42.js +1 -0
  377. package/.next-prod/static/chunks/app/api/db/disconnect/route-e2f146f38bb4df42.js +1 -0
  378. package/.next-prod/static/chunks/app/api/db/export/route-e2f146f38bb4df42.js +1 -0
  379. package/.next-prod/static/chunks/app/api/db/query/route-e2f146f38bb4df42.js +1 -0
  380. package/.next-prod/static/chunks/app/api/db/schemas/route-e2f146f38bb4df42.js +1 -0
  381. package/.next-prod/static/chunks/app/api/deepseek/balance/route-e2f146f38bb4df42.js +1 -0
  382. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-e2f146f38bb4df42.js +1 -0
  383. package/.next-prod/static/chunks/app/api/deepseek/models/route-e2f146f38bb4df42.js +1 -0
  384. package/.next-prod/static/chunks/app/api/dev/spans/route-e2f146f38bb4df42.js +1 -0
  385. package/.next-prod/static/chunks/app/api/extension/version/route-e2f146f38bb4df42.js +1 -0
  386. package/.next-prod/static/chunks/app/api/file/route-e2f146f38bb4df42.js +1 -0
  387. package/.next-prod/static/chunks/app/api/files/blame/route-e2f146f38bb4df42.js +1 -0
  388. package/.next-prod/static/chunks/app/api/files/clipboard/route-e2f146f38bb4df42.js +1 -0
  389. package/.next-prod/static/chunks/app/api/files/copy/route-e2f146f38bb4df42.js +1 -0
  390. package/.next-prod/static/chunks/app/api/files/delete/route-e2f146f38bb4df42.js +1 -0
  391. package/.next-prod/static/chunks/app/api/files/expanded/route-e2f146f38bb4df42.js +1 -0
  392. package/.next-prod/static/chunks/app/api/files/index/route-e2f146f38bb4df42.js +1 -0
  393. package/.next-prod/static/chunks/app/api/files/init/route-e2f146f38bb4df42.js +1 -0
  394. package/.next-prod/static/chunks/app/api/files/paste/route-e2f146f38bb4df42.js +1 -0
  395. package/.next-prod/static/chunks/app/api/files/read/route-e2f146f38bb4df42.js +1 -0
  396. package/.next-prod/static/chunks/app/api/files/readdir/route-e2f146f38bb4df42.js +1 -0
  397. package/.next-prod/static/chunks/app/api/files/recent/route-e2f146f38bb4df42.js +1 -0
  398. package/.next-prod/static/chunks/app/api/files/save/route-e2f146f38bb4df42.js +1 -0
  399. package/.next-prod/static/chunks/app/api/files/search/route-e2f146f38bb4df42.js +1 -0
  400. package/.next-prod/static/chunks/app/api/files/stat/route-e2f146f38bb4df42.js +1 -0
  401. package/.next-prod/static/chunks/app/api/files/text/route-e2f146f38bb4df42.js +1 -0
  402. package/.next-prod/static/chunks/app/api/git/blob/route-e2f146f38bb4df42.js +1 -0
  403. package/.next-prod/static/chunks/app/api/git/branch-diff/route-e2f146f38bb4df42.js +1 -0
  404. package/.next-prod/static/chunks/app/api/git/branches/route-e2f146f38bb4df42.js +1 -0
  405. package/.next-prod/static/chunks/app/api/git/commit-diff/route-e2f146f38bb4df42.js +1 -0
  406. package/.next-prod/static/chunks/app/api/git/commits/route-e2f146f38bb4df42.js +1 -0
  407. package/.next-prod/static/chunks/app/api/git/current-branch/route-e2f146f38bb4df42.js +1 -0
  408. package/.next-prod/static/chunks/app/api/git/diff/route-e2f146f38bb4df42.js +1 -0
  409. package/.next-prod/static/chunks/app/api/git/discard/route-e2f146f38bb4df42.js +1 -0
  410. package/.next-prod/static/chunks/app/api/git/stage/route-e2f146f38bb4df42.js +1 -0
  411. package/.next-prod/static/chunks/app/api/git/status/route-e2f146f38bb4df42.js +1 -0
  412. package/.next-prod/static/chunks/app/api/git/unstage/route-e2f146f38bb4df42.js +1 -0
  413. package/.next-prod/static/chunks/app/api/git/worktree/route-e2f146f38bb4df42.js +1 -0
  414. package/.next-prod/static/chunks/app/api/glm/credentials/route-e2f146f38bb4df42.js +1 -0
  415. package/.next-prod/static/chunks/app/api/glm/models/route-e2f146f38bb4df42.js +1 -0
  416. package/.next-prod/static/chunks/app/api/glm/usage/route-e2f146f38bb4df42.js +1 -0
  417. package/.next-prod/static/chunks/app/api/global-state/route-e2f146f38bb4df42.js +1 -0
  418. package/.next-prod/static/chunks/app/api/health/route-e2f146f38bb4df42.js +1 -0
  419. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-e2f146f38bb4df42.js +1 -0
  420. package/.next-prod/static/chunks/app/api/html-apps/route-e2f146f38bb4df42.js +1 -0
  421. package/.next-prod/static/chunks/app/api/instructions/config/route-e2f146f38bb4df42.js +1 -0
  422. package/.next-prod/static/chunks/app/api/kimi/credentials/route-e2f146f38bb4df42.js +1 -0
  423. package/.next-prod/static/chunks/app/api/kimi/models/route-e2f146f38bb4df42.js +1 -0
  424. package/.next-prod/static/chunks/app/api/kimi/usage/route-e2f146f38bb4df42.js +1 -0
  425. package/.next-prod/static/chunks/app/api/lsp/definition/route-e2f146f38bb4df42.js +1 -0
  426. package/.next-prod/static/chunks/app/api/lsp/hover/route-e2f146f38bb4df42.js +1 -0
  427. package/.next-prod/static/chunks/app/api/lsp/references/route-e2f146f38bb4df42.js +1 -0
  428. package/.next-prod/static/chunks/app/api/lsp/status/route-e2f146f38bb4df42.js +1 -0
  429. package/.next-prod/static/chunks/app/api/lsp/warmup/route-e2f146f38bb4df42.js +1 -0
  430. package/.next-prod/static/chunks/app/api/mysql/columns/route-e2f146f38bb4df42.js +1 -0
  431. package/.next-prod/static/chunks/app/api/mysql/connect/route-e2f146f38bb4df42.js +1 -0
  432. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-e2f146f38bb4df42.js +1 -0
  433. package/.next-prod/static/chunks/app/api/mysql/export/route-e2f146f38bb4df42.js +1 -0
  434. package/.next-prod/static/chunks/app/api/mysql/query/route-e2f146f38bb4df42.js +1 -0
  435. package/.next-prod/static/chunks/app/api/mysql/schemas/route-e2f146f38bb4df42.js +1 -0
  436. package/.next-prod/static/chunks/app/api/neo4j/connect/route-e2f146f38bb4df42.js +1 -0
  437. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-e2f146f38bb4df42.js +1 -0
  438. package/.next-prod/static/chunks/app/api/neo4j/query/route-e2f146f38bb4df42.js +1 -0
  439. package/.next-prod/static/chunks/app/api/neo4j/schema/route-e2f146f38bb4df42.js +1 -0
  440. package/.next-prod/static/chunks/app/api/note/route-e2f146f38bb4df42.js +1 -0
  441. package/.next-prod/static/chunks/app/api/ollama/config/route-e2f146f38bb4df42.js +1 -0
  442. package/.next-prod/static/chunks/app/api/ollama/models/route-e2f146f38bb4df42.js +1 -0
  443. package/.next-prod/static/chunks/app/api/ollama/start/route-e2f146f38bb4df42.js +1 -0
  444. package/.next-prod/static/chunks/app/api/open-cursor/route-e2f146f38bb4df42.js +1 -0
  445. package/.next-prod/static/chunks/app/api/open-vscode/route-e2f146f38bb4df42.js +1 -0
  446. package/.next-prod/static/chunks/app/api/pick-folder/route-e2f146f38bb4df42.js +1 -0
  447. package/.next-prod/static/chunks/app/api/pinned-sessions/route-e2f146f38bb4df42.js +1 -0
  448. package/.next-prod/static/chunks/app/api/project-settings/route-e2f146f38bb4df42.js +1 -0
  449. package/.next-prod/static/chunks/app/api/project-state/route-e2f146f38bb4df42.js +1 -0
  450. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-e2f146f38bb4df42.js +1 -0
  451. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-e2f146f38bb4df42.js +1 -0
  452. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-e2f146f38bb4df42.js +1 -0
  453. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-e2f146f38bb4df42.js +1 -0
  454. package/.next-prod/static/chunks/app/api/projectGraph/context/route-e2f146f38bb4df42.js +1 -0
  455. package/.next-prod/static/chunks/app/api/projectGraph/file/route-e2f146f38bb4df42.js +1 -0
  456. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-e2f146f38bb4df42.js +1 -0
  457. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-e2f146f38bb4df42.js +1 -0
  458. package/.next-prod/static/chunks/app/api/projectGraph/related/route-e2f146f38bb4df42.js +1 -0
  459. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-e2f146f38bb4df42.js +1 -0
  460. package/.next-prod/static/chunks/app/api/projectGraph/search/route-e2f146f38bb4df42.js +1 -0
  461. package/.next-prod/static/chunks/app/api/projects/route-e2f146f38bb4df42.js +1 -0
  462. package/.next-prod/static/chunks/app/api/push/public-key/route-e2f146f38bb4df42.js +1 -0
  463. package/.next-prod/static/chunks/app/api/push/subscribe/route-e2f146f38bb4df42.js +1 -0
  464. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-e2f146f38bb4df42.js +1 -0
  465. package/.next-prod/static/chunks/app/api/redis/command/route-e2f146f38bb4df42.js +1 -0
  466. package/.next-prod/static/chunks/app/api/redis/connect/route-e2f146f38bb4df42.js +1 -0
  467. package/.next-prod/static/chunks/app/api/redis/delete/route-e2f146f38bb4df42.js +1 -0
  468. package/.next-prod/static/chunks/app/api/redis/disconnect/route-e2f146f38bb4df42.js +1 -0
  469. package/.next-prod/static/chunks/app/api/redis/get/route-e2f146f38bb4df42.js +1 -0
  470. package/.next-prod/static/chunks/app/api/redis/keys/route-e2f146f38bb4df42.js +1 -0
  471. package/.next-prod/static/chunks/app/api/redis/set/route-e2f146f38bb4df42.js +1 -0
  472. package/.next-prod/static/chunks/app/api/restart/route-e2f146f38bb4df42.js +1 -0
  473. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-e2f146f38bb4df42.js +1 -0
  474. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-e2f146f38bb4df42.js +1 -0
  475. package/.next-prod/static/chunks/app/api/review/[id]/route-e2f146f38bb4df42.js +1 -0
  476. package/.next-prod/static/chunks/app/api/review/identify/route-e2f146f38bb4df42.js +1 -0
  477. package/.next-prod/static/chunks/app/api/review/order/route-e2f146f38bb4df42.js +1 -0
  478. package/.next-prod/static/chunks/app/api/review/route-e2f146f38bb4df42.js +1 -0
  479. package/.next-prod/static/chunks/app/api/review/share-info/route-e2f146f38bb4df42.js +1 -0
  480. package/.next-prod/static/chunks/app/api/review/users/route-e2f146f38bb4df42.js +1 -0
  481. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-e2f146f38bb4df42.js +1 -0
  482. package/.next-prod/static/chunks/app/api/services/config/route-e2f146f38bb4df42.js +1 -0
  483. package/.next-prod/static/chunks/app/api/services/scripts/route-e2f146f38bb4df42.js +1 -0
  484. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-e2f146f38bb4df42.js +1 -0
  485. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-e2f146f38bb4df42.js +1 -0
  486. package/.next-prod/static/chunks/app/api/session/[sessionId]/turn/route-e2f146f38bb4df42.js +1 -0
  487. package/.next-prod/static/chunks/app/api/session/user-messages/route-e2f146f38bb4df42.js +1 -0
  488. package/.next-prod/static/chunks/app/api/session-by-path/route-e2f146f38bb4df42.js +1 -0
  489. package/.next-prod/static/chunks/app/api/sessions/delegate/route-e2f146f38bb4df42.js +1 -0
  490. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-e2f146f38bb4df42.js +1 -0
  491. package/.next-prod/static/chunks/app/api/sessions/projects/route-e2f146f38bb4df42.js +1 -0
  492. package/.next-prod/static/chunks/app/api/sessions/route-e2f146f38bb4df42.js +1 -0
  493. package/.next-prod/static/chunks/app/api/sessions/search/route-e2f146f38bb4df42.js +1 -0
  494. package/.next-prod/static/chunks/app/api/sessions/status/route-e2f146f38bb4df42.js +1 -0
  495. package/.next-prod/static/chunks/app/api/settings/route-e2f146f38bb4df42.js +1 -0
  496. package/.next-prod/static/chunks/app/api/shutdown/route-e2f146f38bb4df42.js +1 -0
  497. package/.next-prod/static/chunks/app/api/skills/[id]/route-e2f146f38bb4df42.js +1 -0
  498. package/.next-prod/static/chunks/app/api/skills/content/route-e2f146f38bb4df42.js +1 -0
  499. package/.next-prod/static/chunks/app/api/skills/route-e2f146f38bb4df42.js +1 -0
  500. package/.next-prod/static/chunks/app/api/snapshots/blob/route-e2f146f38bb4df42.js +1 -0
  501. package/.next-prod/static/chunks/app/api/snapshots/diff/route-e2f146f38bb4df42.js +1 -0
  502. package/.next-prod/static/chunks/app/api/snapshots/route-e2f146f38bb4df42.js +1 -0
  503. package/.next-prod/static/chunks/app/api/terminal/aliases/route-e2f146f38bb4df42.js +1 -0
  504. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-e2f146f38bb4df42.js +1 -0
  505. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-e2f146f38bb4df42.js +1 -0
  506. package/.next-prod/static/chunks/app/api/terminal/env/route-e2f146f38bb4df42.js +1 -0
  507. package/.next-prod/static/chunks/app/api/terminal/history/route-e2f146f38bb4df42.js +1 -0
  508. package/.next-prod/static/chunks/app/api/update/route-e2f146f38bb4df42.js +1 -0
  509. package/.next-prod/static/chunks/app/api/update-state/route-e2f146f38bb4df42.js +1 -0
  510. package/.next-prod/static/chunks/app/api/version/route-e2f146f38bb4df42.js +1 -0
  511. package/.next-prod/static/chunks/app/apps/[...path]/route-e2f146f38bb4df42.js +1 -0
  512. package/.next-prod/static/chunks/app/layout-347ca1b3228d5b23.js +1 -0
  513. package/.next-prod/static/chunks/app/manifest.webmanifest/route-e2f146f38bb4df42.js +1 -0
  514. package/.next-prod/static/chunks/app/page-2ade7ecd21636624.js +1 -0
  515. package/.next-prod/static/chunks/app/project/page-2ade7ecd21636624.js +1 -0
  516. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-e2f146f38bb4df42.js +1 -0
  517. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-e2f146f38bb4df42.js +1 -0
  518. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-e2f146f38bb4df42.js +1 -0
  519. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-e2f146f38bb4df42.js +1 -0
  520. package/.next-prod/static/css/7a02a222d1299650.css +1 -0
  521. package/.next-prod/trace +15 -15
  522. package/.next-prod/trace-build +1 -1
  523. package/.next-prod/types/app/api/bots/[id]/route.ts +353 -0
  524. package/.next-prod/types/app/api/bots/route.ts +353 -0
  525. package/.next-prod/types/routes.d.ts +3 -1
  526. package/.next-prod/types/validator.ts +18 -0
  527. package/README.md +13 -0
  528. package/README.zh.md +13 -0
  529. package/bots/README.md +86 -0
  530. package/bots/cockpit-helper/BOT.md +95 -0
  531. package/bots/cockpit-helper/commitments/active.md +3 -0
  532. package/bots/cockpit-helper/evidence/refs.md +3 -0
  533. package/bots/cockpit-helper/identity/persona.md +25 -0
  534. package/bots/cockpit-helper/identity/principles.md +49 -0
  535. package/bots/cockpit-helper/memory/facts.md +3 -0
  536. package/bots/cockpit-helper/relationships/user.md +3 -0
  537. package/dist/{chunk-JJWVBF6H.mjs → chunk-BCWVTDEZ.mjs} +648 -140
  538. package/dist/{chunk-6R4AHIIV.mjs → chunk-QY2K7YIF.mjs} +1 -1
  539. package/dist/httpApi.mjs +2 -2
  540. package/dist/scheduledTasks.mjs +80 -14
  541. package/dist/wsServer.mjs +2 -2
  542. package/package.json +2 -1
  543. package/skills/README.md +18 -2
  544. package/skills/bot/SKILL.md +155 -0
  545. package/skills/bot-run/SKILL.md +214 -0
  546. package/skills/bot-turn/SKILL.md +99 -0
  547. package/skills/bot-turn/attach.md +45 -0
  548. package/skills/bot-turn/export.md +113 -0
  549. package/skills/bot-turn/review.md +101 -0
  550. package/skills/bot-turn/writing.md +110 -0
  551. package/.next-prod/server/chunks/5750.js +0 -762
  552. package/.next-prod/static/chunks/72539-7e4ca2de5c9f3f90.js +0 -17
  553. package/.next-prod/static/chunks/89656-bc48af1f9ee9c312.js +0 -32
  554. package/.next-prod/static/chunks/99092-36ee2c49e4c4c059.js +0 -716
  555. package/.next-prod/static/chunks/app/api/chat/deepseek/route-b56c0b18a3b4d026.js +0 -1
  556. package/.next-prod/static/chunks/app/api/chat/glm/route-b56c0b18a3b4d026.js +0 -1
  557. package/.next-prod/static/chunks/app/api/chat/kimi/route-b56c0b18a3b4d026.js +0 -1
  558. package/.next-prod/static/chunks/app/api/chat/ollama/route-b56c0b18a3b4d026.js +0 -1
  559. package/.next-prod/static/chunks/app/api/chat/route-b56c0b18a3b4d026.js +0 -1
  560. package/.next-prod/static/chunks/app/api/chat/stop/route-b56c0b18a3b4d026.js +0 -1
  561. package/.next-prod/static/chunks/app/api/claude-stats/route-b56c0b18a3b4d026.js +0 -1
  562. package/.next-prod/static/chunks/app/api/commands/route-b56c0b18a3b4d026.js +0 -1
  563. package/.next-prod/static/chunks/app/api/comments/route-b56c0b18a3b4d026.js +0 -1
  564. package/.next-prod/static/chunks/app/api/db/columns/route-b56c0b18a3b4d026.js +0 -1
  565. package/.next-prod/static/chunks/app/api/db/connect/route-b56c0b18a3b4d026.js +0 -1
  566. package/.next-prod/static/chunks/app/api/db/disconnect/route-b56c0b18a3b4d026.js +0 -1
  567. package/.next-prod/static/chunks/app/api/db/export/route-b56c0b18a3b4d026.js +0 -1
  568. package/.next-prod/static/chunks/app/api/db/query/route-b56c0b18a3b4d026.js +0 -1
  569. package/.next-prod/static/chunks/app/api/db/schemas/route-b56c0b18a3b4d026.js +0 -1
  570. package/.next-prod/static/chunks/app/api/deepseek/balance/route-b56c0b18a3b4d026.js +0 -1
  571. package/.next-prod/static/chunks/app/api/deepseek/credentials/route-b56c0b18a3b4d026.js +0 -1
  572. package/.next-prod/static/chunks/app/api/deepseek/models/route-b56c0b18a3b4d026.js +0 -1
  573. package/.next-prod/static/chunks/app/api/dev/spans/route-b56c0b18a3b4d026.js +0 -1
  574. package/.next-prod/static/chunks/app/api/extension/version/route-b56c0b18a3b4d026.js +0 -1
  575. package/.next-prod/static/chunks/app/api/file/route-b56c0b18a3b4d026.js +0 -1
  576. package/.next-prod/static/chunks/app/api/files/blame/route-b56c0b18a3b4d026.js +0 -1
  577. package/.next-prod/static/chunks/app/api/files/clipboard/route-b56c0b18a3b4d026.js +0 -1
  578. package/.next-prod/static/chunks/app/api/files/copy/route-b56c0b18a3b4d026.js +0 -1
  579. package/.next-prod/static/chunks/app/api/files/delete/route-b56c0b18a3b4d026.js +0 -1
  580. package/.next-prod/static/chunks/app/api/files/expanded/route-b56c0b18a3b4d026.js +0 -1
  581. package/.next-prod/static/chunks/app/api/files/index/route-b56c0b18a3b4d026.js +0 -1
  582. package/.next-prod/static/chunks/app/api/files/init/route-b56c0b18a3b4d026.js +0 -1
  583. package/.next-prod/static/chunks/app/api/files/paste/route-b56c0b18a3b4d026.js +0 -1
  584. package/.next-prod/static/chunks/app/api/files/read/route-b56c0b18a3b4d026.js +0 -1
  585. package/.next-prod/static/chunks/app/api/files/readdir/route-b56c0b18a3b4d026.js +0 -1
  586. package/.next-prod/static/chunks/app/api/files/recent/route-b56c0b18a3b4d026.js +0 -1
  587. package/.next-prod/static/chunks/app/api/files/save/route-b56c0b18a3b4d026.js +0 -1
  588. package/.next-prod/static/chunks/app/api/files/search/route-b56c0b18a3b4d026.js +0 -1
  589. package/.next-prod/static/chunks/app/api/files/stat/route-b56c0b18a3b4d026.js +0 -1
  590. package/.next-prod/static/chunks/app/api/files/text/route-b56c0b18a3b4d026.js +0 -1
  591. package/.next-prod/static/chunks/app/api/git/blob/route-b56c0b18a3b4d026.js +0 -1
  592. package/.next-prod/static/chunks/app/api/git/branch-diff/route-b56c0b18a3b4d026.js +0 -1
  593. package/.next-prod/static/chunks/app/api/git/branches/route-b56c0b18a3b4d026.js +0 -1
  594. package/.next-prod/static/chunks/app/api/git/commit-diff/route-b56c0b18a3b4d026.js +0 -1
  595. package/.next-prod/static/chunks/app/api/git/commits/route-b56c0b18a3b4d026.js +0 -1
  596. package/.next-prod/static/chunks/app/api/git/current-branch/route-b56c0b18a3b4d026.js +0 -1
  597. package/.next-prod/static/chunks/app/api/git/diff/route-b56c0b18a3b4d026.js +0 -1
  598. package/.next-prod/static/chunks/app/api/git/discard/route-b56c0b18a3b4d026.js +0 -1
  599. package/.next-prod/static/chunks/app/api/git/stage/route-b56c0b18a3b4d026.js +0 -1
  600. package/.next-prod/static/chunks/app/api/git/status/route-b56c0b18a3b4d026.js +0 -1
  601. package/.next-prod/static/chunks/app/api/git/unstage/route-b56c0b18a3b4d026.js +0 -1
  602. package/.next-prod/static/chunks/app/api/git/worktree/route-b56c0b18a3b4d026.js +0 -1
  603. package/.next-prod/static/chunks/app/api/glm/credentials/route-b56c0b18a3b4d026.js +0 -1
  604. package/.next-prod/static/chunks/app/api/glm/models/route-b56c0b18a3b4d026.js +0 -1
  605. package/.next-prod/static/chunks/app/api/glm/usage/route-b56c0b18a3b4d026.js +0 -1
  606. package/.next-prod/static/chunks/app/api/global-state/route-b56c0b18a3b4d026.js +0 -1
  607. package/.next-prod/static/chunks/app/api/health/route-b56c0b18a3b4d026.js +0 -1
  608. package/.next-prod/static/chunks/app/api/html-apps/[id]/route-b56c0b18a3b4d026.js +0 -1
  609. package/.next-prod/static/chunks/app/api/html-apps/route-b56c0b18a3b4d026.js +0 -1
  610. package/.next-prod/static/chunks/app/api/instructions/config/route-b56c0b18a3b4d026.js +0 -1
  611. package/.next-prod/static/chunks/app/api/kimi/credentials/route-b56c0b18a3b4d026.js +0 -1
  612. package/.next-prod/static/chunks/app/api/kimi/models/route-b56c0b18a3b4d026.js +0 -1
  613. package/.next-prod/static/chunks/app/api/kimi/usage/route-b56c0b18a3b4d026.js +0 -1
  614. package/.next-prod/static/chunks/app/api/lsp/definition/route-b56c0b18a3b4d026.js +0 -1
  615. package/.next-prod/static/chunks/app/api/lsp/hover/route-b56c0b18a3b4d026.js +0 -1
  616. package/.next-prod/static/chunks/app/api/lsp/references/route-b56c0b18a3b4d026.js +0 -1
  617. package/.next-prod/static/chunks/app/api/lsp/status/route-b56c0b18a3b4d026.js +0 -1
  618. package/.next-prod/static/chunks/app/api/lsp/warmup/route-b56c0b18a3b4d026.js +0 -1
  619. package/.next-prod/static/chunks/app/api/mysql/columns/route-b56c0b18a3b4d026.js +0 -1
  620. package/.next-prod/static/chunks/app/api/mysql/connect/route-b56c0b18a3b4d026.js +0 -1
  621. package/.next-prod/static/chunks/app/api/mysql/disconnect/route-b56c0b18a3b4d026.js +0 -1
  622. package/.next-prod/static/chunks/app/api/mysql/export/route-b56c0b18a3b4d026.js +0 -1
  623. package/.next-prod/static/chunks/app/api/mysql/query/route-b56c0b18a3b4d026.js +0 -1
  624. package/.next-prod/static/chunks/app/api/mysql/schemas/route-b56c0b18a3b4d026.js +0 -1
  625. package/.next-prod/static/chunks/app/api/neo4j/connect/route-b56c0b18a3b4d026.js +0 -1
  626. package/.next-prod/static/chunks/app/api/neo4j/disconnect/route-b56c0b18a3b4d026.js +0 -1
  627. package/.next-prod/static/chunks/app/api/neo4j/query/route-b56c0b18a3b4d026.js +0 -1
  628. package/.next-prod/static/chunks/app/api/neo4j/schema/route-b56c0b18a3b4d026.js +0 -1
  629. package/.next-prod/static/chunks/app/api/note/route-b56c0b18a3b4d026.js +0 -1
  630. package/.next-prod/static/chunks/app/api/ollama/config/route-b56c0b18a3b4d026.js +0 -1
  631. package/.next-prod/static/chunks/app/api/ollama/models/route-b56c0b18a3b4d026.js +0 -1
  632. package/.next-prod/static/chunks/app/api/ollama/start/route-b56c0b18a3b4d026.js +0 -1
  633. package/.next-prod/static/chunks/app/api/open-cursor/route-b56c0b18a3b4d026.js +0 -1
  634. package/.next-prod/static/chunks/app/api/open-vscode/route-b56c0b18a3b4d026.js +0 -1
  635. package/.next-prod/static/chunks/app/api/pick-folder/route-b56c0b18a3b4d026.js +0 -1
  636. package/.next-prod/static/chunks/app/api/pinned-sessions/route-b56c0b18a3b4d026.js +0 -1
  637. package/.next-prod/static/chunks/app/api/project-settings/route-b56c0b18a3b4d026.js +0 -1
  638. package/.next-prod/static/chunks/app/api/project-state/route-b56c0b18a3b4d026.js +0 -1
  639. package/.next-prod/static/chunks/app/api/projectGraph/affected/route-b56c0b18a3b4d026.js +0 -1
  640. package/.next-prod/static/chunks/app/api/projectGraph/callees/route-b56c0b18a3b4d026.js +0 -1
  641. package/.next-prod/static/chunks/app/api/projectGraph/callers/route-b56c0b18a3b4d026.js +0 -1
  642. package/.next-prod/static/chunks/app/api/projectGraph/coedit/route-b56c0b18a3b4d026.js +0 -1
  643. package/.next-prod/static/chunks/app/api/projectGraph/context/route-b56c0b18a3b4d026.js +0 -1
  644. package/.next-prod/static/chunks/app/api/projectGraph/file/route-b56c0b18a3b4d026.js +0 -1
  645. package/.next-prod/static/chunks/app/api/projectGraph/file-functions/route-b56c0b18a3b4d026.js +0 -1
  646. package/.next-prod/static/chunks/app/api/projectGraph/impact/route-b56c0b18a3b4d026.js +0 -1
  647. package/.next-prod/static/chunks/app/api/projectGraph/related/route-b56c0b18a3b4d026.js +0 -1
  648. package/.next-prod/static/chunks/app/api/projectGraph/risk/route-b56c0b18a3b4d026.js +0 -1
  649. package/.next-prod/static/chunks/app/api/projectGraph/search/route-b56c0b18a3b4d026.js +0 -1
  650. package/.next-prod/static/chunks/app/api/projects/route-b56c0b18a3b4d026.js +0 -1
  651. package/.next-prod/static/chunks/app/api/push/public-key/route-b56c0b18a3b4d026.js +0 -1
  652. package/.next-prod/static/chunks/app/api/push/subscribe/route-b56c0b18a3b4d026.js +0 -1
  653. package/.next-prod/static/chunks/app/api/push/unsubscribe/route-b56c0b18a3b4d026.js +0 -1
  654. package/.next-prod/static/chunks/app/api/redis/command/route-b56c0b18a3b4d026.js +0 -1
  655. package/.next-prod/static/chunks/app/api/redis/connect/route-b56c0b18a3b4d026.js +0 -1
  656. package/.next-prod/static/chunks/app/api/redis/delete/route-b56c0b18a3b4d026.js +0 -1
  657. package/.next-prod/static/chunks/app/api/redis/disconnect/route-b56c0b18a3b4d026.js +0 -1
  658. package/.next-prod/static/chunks/app/api/redis/get/route-b56c0b18a3b4d026.js +0 -1
  659. package/.next-prod/static/chunks/app/api/redis/keys/route-b56c0b18a3b4d026.js +0 -1
  660. package/.next-prod/static/chunks/app/api/redis/set/route-b56c0b18a3b4d026.js +0 -1
  661. package/.next-prod/static/chunks/app/api/restart/route-b56c0b18a3b4d026.js +0 -1
  662. package/.next-prod/static/chunks/app/api/review/[id]/comments/route-b56c0b18a3b4d026.js +0 -1
  663. package/.next-prod/static/chunks/app/api/review/[id]/replies/route-b56c0b18a3b4d026.js +0 -1
  664. package/.next-prod/static/chunks/app/api/review/[id]/route-b56c0b18a3b4d026.js +0 -1
  665. package/.next-prod/static/chunks/app/api/review/identify/route-b56c0b18a3b4d026.js +0 -1
  666. package/.next-prod/static/chunks/app/api/review/order/route-b56c0b18a3b4d026.js +0 -1
  667. package/.next-prod/static/chunks/app/api/review/route-b56c0b18a3b4d026.js +0 -1
  668. package/.next-prod/static/chunks/app/api/review/share-info/route-b56c0b18a3b4d026.js +0 -1
  669. package/.next-prod/static/chunks/app/api/review/users/route-b56c0b18a3b4d026.js +0 -1
  670. package/.next-prod/static/chunks/app/api/scheduled-tasks/route-b56c0b18a3b4d026.js +0 -1
  671. package/.next-prod/static/chunks/app/api/services/config/route-b56c0b18a3b4d026.js +0 -1
  672. package/.next-prod/static/chunks/app/api/services/scripts/route-b56c0b18a3b4d026.js +0 -1
  673. package/.next-prod/static/chunks/app/api/session/[sessionId]/fork/route-b56c0b18a3b4d026.js +0 -1
  674. package/.next-prod/static/chunks/app/api/session/[sessionId]/history/route-b56c0b18a3b4d026.js +0 -1
  675. package/.next-prod/static/chunks/app/api/session/[sessionId]/turn/route-b56c0b18a3b4d026.js +0 -1
  676. package/.next-prod/static/chunks/app/api/session/user-messages/route-b56c0b18a3b4d026.js +0 -1
  677. package/.next-prod/static/chunks/app/api/session-by-path/route-b56c0b18a3b4d026.js +0 -1
  678. package/.next-prod/static/chunks/app/api/sessions/delegate/route-b56c0b18a3b4d026.js +0 -1
  679. package/.next-prod/static/chunks/app/api/sessions/projects/[encodedPath]/route-b56c0b18a3b4d026.js +0 -1
  680. package/.next-prod/static/chunks/app/api/sessions/projects/route-b56c0b18a3b4d026.js +0 -1
  681. package/.next-prod/static/chunks/app/api/sessions/route-b56c0b18a3b4d026.js +0 -1
  682. package/.next-prod/static/chunks/app/api/sessions/search/route-b56c0b18a3b4d026.js +0 -1
  683. package/.next-prod/static/chunks/app/api/sessions/status/route-b56c0b18a3b4d026.js +0 -1
  684. package/.next-prod/static/chunks/app/api/settings/route-b56c0b18a3b4d026.js +0 -1
  685. package/.next-prod/static/chunks/app/api/shutdown/route-b56c0b18a3b4d026.js +0 -1
  686. package/.next-prod/static/chunks/app/api/skills/[id]/route-b56c0b18a3b4d026.js +0 -1
  687. package/.next-prod/static/chunks/app/api/skills/content/route-b56c0b18a3b4d026.js +0 -1
  688. package/.next-prod/static/chunks/app/api/skills/route-b56c0b18a3b4d026.js +0 -1
  689. package/.next-prod/static/chunks/app/api/snapshots/blob/route-b56c0b18a3b4d026.js +0 -1
  690. package/.next-prod/static/chunks/app/api/snapshots/diff/route-b56c0b18a3b4d026.js +0 -1
  691. package/.next-prod/static/chunks/app/api/snapshots/route-b56c0b18a3b4d026.js +0 -1
  692. package/.next-prod/static/chunks/app/api/terminal/aliases/route-b56c0b18a3b4d026.js +0 -1
  693. package/.next-prod/static/chunks/app/api/terminal/autocomplete/route-b56c0b18a3b4d026.js +0 -1
  694. package/.next-prod/static/chunks/app/api/terminal/bubble-order/route-b56c0b18a3b4d026.js +0 -1
  695. package/.next-prod/static/chunks/app/api/terminal/env/route-b56c0b18a3b4d026.js +0 -1
  696. package/.next-prod/static/chunks/app/api/terminal/history/route-b56c0b18a3b4d026.js +0 -1
  697. package/.next-prod/static/chunks/app/api/update/route-b56c0b18a3b4d026.js +0 -1
  698. package/.next-prod/static/chunks/app/api/update-state/route-b56c0b18a3b4d026.js +0 -1
  699. package/.next-prod/static/chunks/app/api/version/route-b56c0b18a3b4d026.js +0 -1
  700. package/.next-prod/static/chunks/app/apps/[...path]/route-b56c0b18a3b4d026.js +0 -1
  701. package/.next-prod/static/chunks/app/layout-5e8ca15dabb4d8c2.js +0 -1
  702. package/.next-prod/static/chunks/app/manifest.webmanifest/route-b56c0b18a3b4d026.js +0 -1
  703. package/.next-prod/static/chunks/app/page-eb7a11e6dd6a9e94.js +0 -1
  704. package/.next-prod/static/chunks/app/project/page-eb7a11e6dd6a9e94.js +0 -1
  705. package/.next-prod/static/chunks/next/dist/client/components/builtin/app-error-b56c0b18a3b4d026.js +0 -1
  706. package/.next-prod/static/chunks/next/dist/client/components/builtin/forbidden-b56c0b18a3b4d026.js +0 -1
  707. package/.next-prod/static/chunks/next/dist/client/components/builtin/not-found-b56c0b18a3b4d026.js +0 -1
  708. package/.next-prod/static/chunks/next/dist/client/components/builtin/unauthorized-b56c0b18a3b4d026.js +0 -1
  709. package/.next-prod/static/css/08c892de6d5e2335.css +0 -1
  710. package/.next-prod/static/mTTTlFslhC7zzHMDXGNOW/_buildManifest.js +0 -1
  711. /package/.next-prod/static/{mTTTlFslhC7zzHMDXGNOW → O8neHUIr3dQhe1jcOUsQ8}/_ssgManifest.js +0 -0
@@ -0,0 +1,353 @@
1
+ // File: /home/runner/work/cockpit/cockpit/src/app/api/bots/route.ts
2
+ import * as entry from '../../../../../src/app/api/bots/route.js'
3
+ import type { NextRequest } from 'next/server.js'
4
+
5
+ import type { InstantConfigForTypeCheckInternal, Prefetch } from 'next/dist/build/segment-config/app/app-segment-config.js'
6
+
7
+ type TEntry = typeof import('../../../../../src/app/api/bots/route.js')
8
+
9
+ type SegmentParams<T extends Object = any> = T extends Record<string, any>
10
+ ? { [K in keyof T]: T[K] extends string ? string | string[] | undefined : never }
11
+ : T
12
+
13
+ // Check that the entry is a valid entry
14
+ checkFields<Diff<{
15
+ GET?: Function
16
+ HEAD?: Function
17
+ OPTIONS?: Function
18
+ POST?: Function
19
+ PUT?: Function
20
+ DELETE?: Function
21
+ PATCH?: Function
22
+ config?: {}
23
+ generateStaticParams?: Function
24
+ instant?: InstantConfigForTypeCheckInternal
25
+ prefetch?: Prefetch
26
+ unstable_dynamicStaleTime?: number
27
+ revalidate?: RevalidateRange<TEntry> | false
28
+ dynamic?: 'auto' | 'force-dynamic' | 'error' | 'force-static'
29
+ dynamicParams?: boolean
30
+ fetchCache?: 'auto' | 'force-no-store' | 'only-no-store' | 'default-no-store' | 'default-cache' | 'only-cache' | 'force-cache'
31
+ /** @deprecated The `preferredRegion` config is deprecated. Remove this export. */
32
+ preferredRegion?: 'auto' | 'global' | 'home' | string | string[]
33
+ runtime?: 'nodejs' | 'experimental-edge' | 'edge'
34
+ maxDuration?: number
35
+
36
+ }, TEntry, ''>>()
37
+
38
+ type RouteContext = { params: Promise<SegmentParams> }
39
+ // Check the prop type of the entry function
40
+ if ('GET' in entry) {
41
+ checkFields<
42
+ Diff<
43
+ ParamCheck<Request | NextRequest>,
44
+ {
45
+ __tag__: 'GET'
46
+ __param_position__: 'first'
47
+ __param_type__: FirstArg<MaybeField<TEntry, 'GET'>>
48
+ },
49
+ 'GET'
50
+ >
51
+ >()
52
+ checkFields<
53
+ Diff<
54
+ ParamCheck<RouteContext>,
55
+ {
56
+ __tag__: 'GET'
57
+ __param_position__: 'second'
58
+ __param_type__: SecondArg<MaybeField<TEntry, 'GET'>>
59
+ },
60
+ 'GET'
61
+ >
62
+ >()
63
+
64
+ checkFields<
65
+ Diff<
66
+ {
67
+ __tag__: 'GET',
68
+ __return_type__: Response | void | never | Promise<Response | void | never>
69
+ },
70
+ {
71
+ __tag__: 'GET',
72
+ __return_type__: ReturnType<MaybeField<TEntry, 'GET'>>
73
+ },
74
+ 'GET'
75
+ >
76
+ >()
77
+ }
78
+ // Check the prop type of the entry function
79
+ if ('HEAD' in entry) {
80
+ checkFields<
81
+ Diff<
82
+ ParamCheck<Request | NextRequest>,
83
+ {
84
+ __tag__: 'HEAD'
85
+ __param_position__: 'first'
86
+ __param_type__: FirstArg<MaybeField<TEntry, 'HEAD'>>
87
+ },
88
+ 'HEAD'
89
+ >
90
+ >()
91
+ checkFields<
92
+ Diff<
93
+ ParamCheck<RouteContext>,
94
+ {
95
+ __tag__: 'HEAD'
96
+ __param_position__: 'second'
97
+ __param_type__: SecondArg<MaybeField<TEntry, 'HEAD'>>
98
+ },
99
+ 'HEAD'
100
+ >
101
+ >()
102
+
103
+ checkFields<
104
+ Diff<
105
+ {
106
+ __tag__: 'HEAD',
107
+ __return_type__: Response | void | never | Promise<Response | void | never>
108
+ },
109
+ {
110
+ __tag__: 'HEAD',
111
+ __return_type__: ReturnType<MaybeField<TEntry, 'HEAD'>>
112
+ },
113
+ 'HEAD'
114
+ >
115
+ >()
116
+ }
117
+ // Check the prop type of the entry function
118
+ if ('OPTIONS' in entry) {
119
+ checkFields<
120
+ Diff<
121
+ ParamCheck<Request | NextRequest>,
122
+ {
123
+ __tag__: 'OPTIONS'
124
+ __param_position__: 'first'
125
+ __param_type__: FirstArg<MaybeField<TEntry, 'OPTIONS'>>
126
+ },
127
+ 'OPTIONS'
128
+ >
129
+ >()
130
+ checkFields<
131
+ Diff<
132
+ ParamCheck<RouteContext>,
133
+ {
134
+ __tag__: 'OPTIONS'
135
+ __param_position__: 'second'
136
+ __param_type__: SecondArg<MaybeField<TEntry, 'OPTIONS'>>
137
+ },
138
+ 'OPTIONS'
139
+ >
140
+ >()
141
+
142
+ checkFields<
143
+ Diff<
144
+ {
145
+ __tag__: 'OPTIONS',
146
+ __return_type__: Response | void | never | Promise<Response | void | never>
147
+ },
148
+ {
149
+ __tag__: 'OPTIONS',
150
+ __return_type__: ReturnType<MaybeField<TEntry, 'OPTIONS'>>
151
+ },
152
+ 'OPTIONS'
153
+ >
154
+ >()
155
+ }
156
+ // Check the prop type of the entry function
157
+ if ('POST' in entry) {
158
+ checkFields<
159
+ Diff<
160
+ ParamCheck<Request | NextRequest>,
161
+ {
162
+ __tag__: 'POST'
163
+ __param_position__: 'first'
164
+ __param_type__: FirstArg<MaybeField<TEntry, 'POST'>>
165
+ },
166
+ 'POST'
167
+ >
168
+ >()
169
+ checkFields<
170
+ Diff<
171
+ ParamCheck<RouteContext>,
172
+ {
173
+ __tag__: 'POST'
174
+ __param_position__: 'second'
175
+ __param_type__: SecondArg<MaybeField<TEntry, 'POST'>>
176
+ },
177
+ 'POST'
178
+ >
179
+ >()
180
+
181
+ checkFields<
182
+ Diff<
183
+ {
184
+ __tag__: 'POST',
185
+ __return_type__: Response | void | never | Promise<Response | void | never>
186
+ },
187
+ {
188
+ __tag__: 'POST',
189
+ __return_type__: ReturnType<MaybeField<TEntry, 'POST'>>
190
+ },
191
+ 'POST'
192
+ >
193
+ >()
194
+ }
195
+ // Check the prop type of the entry function
196
+ if ('PUT' in entry) {
197
+ checkFields<
198
+ Diff<
199
+ ParamCheck<Request | NextRequest>,
200
+ {
201
+ __tag__: 'PUT'
202
+ __param_position__: 'first'
203
+ __param_type__: FirstArg<MaybeField<TEntry, 'PUT'>>
204
+ },
205
+ 'PUT'
206
+ >
207
+ >()
208
+ checkFields<
209
+ Diff<
210
+ ParamCheck<RouteContext>,
211
+ {
212
+ __tag__: 'PUT'
213
+ __param_position__: 'second'
214
+ __param_type__: SecondArg<MaybeField<TEntry, 'PUT'>>
215
+ },
216
+ 'PUT'
217
+ >
218
+ >()
219
+
220
+ checkFields<
221
+ Diff<
222
+ {
223
+ __tag__: 'PUT',
224
+ __return_type__: Response | void | never | Promise<Response | void | never>
225
+ },
226
+ {
227
+ __tag__: 'PUT',
228
+ __return_type__: ReturnType<MaybeField<TEntry, 'PUT'>>
229
+ },
230
+ 'PUT'
231
+ >
232
+ >()
233
+ }
234
+ // Check the prop type of the entry function
235
+ if ('DELETE' in entry) {
236
+ checkFields<
237
+ Diff<
238
+ ParamCheck<Request | NextRequest>,
239
+ {
240
+ __tag__: 'DELETE'
241
+ __param_position__: 'first'
242
+ __param_type__: FirstArg<MaybeField<TEntry, 'DELETE'>>
243
+ },
244
+ 'DELETE'
245
+ >
246
+ >()
247
+ checkFields<
248
+ Diff<
249
+ ParamCheck<RouteContext>,
250
+ {
251
+ __tag__: 'DELETE'
252
+ __param_position__: 'second'
253
+ __param_type__: SecondArg<MaybeField<TEntry, 'DELETE'>>
254
+ },
255
+ 'DELETE'
256
+ >
257
+ >()
258
+
259
+ checkFields<
260
+ Diff<
261
+ {
262
+ __tag__: 'DELETE',
263
+ __return_type__: Response | void | never | Promise<Response | void | never>
264
+ },
265
+ {
266
+ __tag__: 'DELETE',
267
+ __return_type__: ReturnType<MaybeField<TEntry, 'DELETE'>>
268
+ },
269
+ 'DELETE'
270
+ >
271
+ >()
272
+ }
273
+ // Check the prop type of the entry function
274
+ if ('PATCH' in entry) {
275
+ checkFields<
276
+ Diff<
277
+ ParamCheck<Request | NextRequest>,
278
+ {
279
+ __tag__: 'PATCH'
280
+ __param_position__: 'first'
281
+ __param_type__: FirstArg<MaybeField<TEntry, 'PATCH'>>
282
+ },
283
+ 'PATCH'
284
+ >
285
+ >()
286
+ checkFields<
287
+ Diff<
288
+ ParamCheck<RouteContext>,
289
+ {
290
+ __tag__: 'PATCH'
291
+ __param_position__: 'second'
292
+ __param_type__: SecondArg<MaybeField<TEntry, 'PATCH'>>
293
+ },
294
+ 'PATCH'
295
+ >
296
+ >()
297
+
298
+ checkFields<
299
+ Diff<
300
+ {
301
+ __tag__: 'PATCH',
302
+ __return_type__: Response | void | never | Promise<Response | void | never>
303
+ },
304
+ {
305
+ __tag__: 'PATCH',
306
+ __return_type__: ReturnType<MaybeField<TEntry, 'PATCH'>>
307
+ },
308
+ 'PATCH'
309
+ >
310
+ >()
311
+ }
312
+
313
+ // Check the arguments and return type of the generateStaticParams function
314
+ if ('generateStaticParams' in entry) {
315
+ checkFields<Diff<{ params: SegmentParams }, FirstArg<MaybeField<TEntry, 'generateStaticParams'>>, 'generateStaticParams'>>()
316
+ checkFields<Diff<{ __tag__: 'generateStaticParams', __return_type__: any[] | Promise<any[]> }, { __tag__: 'generateStaticParams', __return_type__: ReturnType<MaybeField<TEntry, 'generateStaticParams'>> }>>()
317
+ }
318
+
319
+ export interface PageProps {
320
+ params?: Promise<SegmentParams>
321
+ searchParams?: Promise<any>
322
+ }
323
+ export interface LayoutProps {
324
+ children?: React.ReactNode
325
+
326
+ params?: Promise<SegmentParams>
327
+ }
328
+
329
+ // =============
330
+ // Utility types
331
+ type RevalidateRange<T> = T extends { revalidate: any } ? NonNegative<T['revalidate']> : never
332
+
333
+ // If T is unknown or any, it will be an empty {} type. Otherwise, it will be the same as Omit<T, keyof Base>.
334
+ type OmitWithTag<T, K extends keyof any, _M> = Omit<T, K>
335
+ type Diff<Base, T extends Base, Message extends string = ''> = 0 extends (1 & T) ? {} : OmitWithTag<T, keyof Base, Message>
336
+
337
+ type FirstArg<T extends Function> = T extends (...args: [infer T, any]) => any ? unknown extends T ? any : T : never
338
+ type SecondArg<T extends Function> = T extends (...args: [any, infer T]) => any ? unknown extends T ? any : T : never
339
+ type MaybeField<T, K extends string> = T extends { [k in K]: infer G } ? G extends Function ? G : never : never
340
+
341
+ type ParamCheck<T> = {
342
+ __tag__: string
343
+ __param_position__: string
344
+ __param_type__: T
345
+ }
346
+
347
+ function checkFields<_ extends { [k in keyof any]: never }>() {}
348
+
349
+ // https://github.com/sindresorhus/type-fest
350
+ type Numeric = number | bigint
351
+ type Zero = 0 | 0n
352
+ type Negative<T extends Numeric> = T extends Zero ? never : `${T}` extends `-${string}` ? T : never
353
+ type NonNegative<T extends Numeric> = T extends Zero ? T : Negative<T> extends never ? T : '__invalid_negative_number__'
@@ -2,7 +2,7 @@
2
2
  // Do not edit this file manually
3
3
 
4
4
  type AppRoutes = "/" | "/m" | "/project" | "/review/[id]"
5
- type AppRouteHandlerRoutes = "/api/agent/test" | "/api/bash" | "/api/chat" | "/api/chat/codex" | "/api/chat/deepseek" | "/api/chat/glm" | "/api/chat/kimi" | "/api/chat/ollama" | "/api/chat/stop" | "/api/claude-stats" | "/api/commands" | "/api/comments" | "/api/db/columns" | "/api/db/connect" | "/api/db/disconnect" | "/api/db/export" | "/api/db/query" | "/api/db/schemas" | "/api/deepseek/balance" | "/api/deepseek/credentials" | "/api/deepseek/models" | "/api/dev/spans" | "/api/extension/version" | "/api/file" | "/api/files/blame" | "/api/files/clipboard" | "/api/files/copy" | "/api/files/delete" | "/api/files/expanded" | "/api/files/index" | "/api/files/init" | "/api/files/paste" | "/api/files/read" | "/api/files/readdir" | "/api/files/recent" | "/api/files/save" | "/api/files/search" | "/api/files/stat" | "/api/files/text" | "/api/git/blob" | "/api/git/branch-diff" | "/api/git/branches" | "/api/git/commit-diff" | "/api/git/commits" | "/api/git/current-branch" | "/api/git/diff" | "/api/git/discard" | "/api/git/stage" | "/api/git/status" | "/api/git/unstage" | "/api/git/worktree" | "/api/glm/credentials" | "/api/glm/models" | "/api/glm/usage" | "/api/global-state" | "/api/health" | "/api/html-apps" | "/api/html-apps/[id]" | "/api/instructions/config" | "/api/kimi/credentials" | "/api/kimi/models" | "/api/kimi/usage" | "/api/lsp/definition" | "/api/lsp/hover" | "/api/lsp/references" | "/api/lsp/status" | "/api/lsp/warmup" | "/api/mysql/columns" | "/api/mysql/connect" | "/api/mysql/disconnect" | "/api/mysql/export" | "/api/mysql/query" | "/api/mysql/schemas" | "/api/neo4j/connect" | "/api/neo4j/disconnect" | "/api/neo4j/query" | "/api/neo4j/schema" | "/api/note" | "/api/ollama/config" | "/api/ollama/models" | "/api/ollama/start" | "/api/open-cursor" | "/api/open-vscode" | "/api/pick-folder" | "/api/pinned-sessions" | "/api/project-settings" | "/api/project-state" | "/api/projectGraph/affected" | "/api/projectGraph/callees" | "/api/projectGraph/callers" | "/api/projectGraph/coedit" | "/api/projectGraph/context" | "/api/projectGraph/file" | "/api/projectGraph/file-functions" | "/api/projectGraph/impact" | "/api/projectGraph/related" | "/api/projectGraph/risk" | "/api/projectGraph/search" | "/api/projects" | "/api/push/public-key" | "/api/push/subscribe" | "/api/push/unsubscribe" | "/api/redis/command" | "/api/redis/connect" | "/api/redis/delete" | "/api/redis/disconnect" | "/api/redis/get" | "/api/redis/keys" | "/api/redis/set" | "/api/restart" | "/api/review" | "/api/review/[id]" | "/api/review/[id]/comments" | "/api/review/[id]/replies" | "/api/review/identify" | "/api/review/order" | "/api/review/share-info" | "/api/review/users" | "/api/scheduled-tasks" | "/api/services/config" | "/api/services/scripts" | "/api/session-by-path" | "/api/session/[sessionId]/fork" | "/api/session/[sessionId]/history" | "/api/session/[sessionId]/turn" | "/api/session/user-messages" | "/api/sessions" | "/api/sessions/delegate" | "/api/sessions/projects" | "/api/sessions/projects/[encodedPath]" | "/api/sessions/search" | "/api/sessions/status" | "/api/settings" | "/api/shutdown" | "/api/skills" | "/api/skills/[id]" | "/api/skills/content" | "/api/snapshots" | "/api/snapshots/blob" | "/api/snapshots/diff" | "/api/terminal/aliases" | "/api/terminal/autocomplete" | "/api/terminal/bubble-order" | "/api/terminal/env" | "/api/terminal/history" | "/api/update" | "/api/update-state" | "/api/version" | "/apps/[...path]"
5
+ type AppRouteHandlerRoutes = "/api/agent/test" | "/api/bash" | "/api/bots" | "/api/bots/[id]" | "/api/chat" | "/api/chat/codex" | "/api/chat/deepseek" | "/api/chat/glm" | "/api/chat/kimi" | "/api/chat/ollama" | "/api/chat/stop" | "/api/claude-stats" | "/api/commands" | "/api/comments" | "/api/db/columns" | "/api/db/connect" | "/api/db/disconnect" | "/api/db/export" | "/api/db/query" | "/api/db/schemas" | "/api/deepseek/balance" | "/api/deepseek/credentials" | "/api/deepseek/models" | "/api/dev/spans" | "/api/extension/version" | "/api/file" | "/api/files/blame" | "/api/files/clipboard" | "/api/files/copy" | "/api/files/delete" | "/api/files/expanded" | "/api/files/index" | "/api/files/init" | "/api/files/paste" | "/api/files/read" | "/api/files/readdir" | "/api/files/recent" | "/api/files/save" | "/api/files/search" | "/api/files/stat" | "/api/files/text" | "/api/git/blob" | "/api/git/branch-diff" | "/api/git/branches" | "/api/git/commit-diff" | "/api/git/commits" | "/api/git/current-branch" | "/api/git/diff" | "/api/git/discard" | "/api/git/stage" | "/api/git/status" | "/api/git/unstage" | "/api/git/worktree" | "/api/glm/credentials" | "/api/glm/models" | "/api/glm/usage" | "/api/global-state" | "/api/health" | "/api/html-apps" | "/api/html-apps/[id]" | "/api/instructions/config" | "/api/kimi/credentials" | "/api/kimi/models" | "/api/kimi/usage" | "/api/lsp/definition" | "/api/lsp/hover" | "/api/lsp/references" | "/api/lsp/status" | "/api/lsp/warmup" | "/api/mysql/columns" | "/api/mysql/connect" | "/api/mysql/disconnect" | "/api/mysql/export" | "/api/mysql/query" | "/api/mysql/schemas" | "/api/neo4j/connect" | "/api/neo4j/disconnect" | "/api/neo4j/query" | "/api/neo4j/schema" | "/api/note" | "/api/ollama/config" | "/api/ollama/models" | "/api/ollama/start" | "/api/open-cursor" | "/api/open-vscode" | "/api/pick-folder" | "/api/pinned-sessions" | "/api/project-settings" | "/api/project-state" | "/api/projectGraph/affected" | "/api/projectGraph/callees" | "/api/projectGraph/callers" | "/api/projectGraph/coedit" | "/api/projectGraph/context" | "/api/projectGraph/file" | "/api/projectGraph/file-functions" | "/api/projectGraph/impact" | "/api/projectGraph/related" | "/api/projectGraph/risk" | "/api/projectGraph/search" | "/api/projects" | "/api/push/public-key" | "/api/push/subscribe" | "/api/push/unsubscribe" | "/api/redis/command" | "/api/redis/connect" | "/api/redis/delete" | "/api/redis/disconnect" | "/api/redis/get" | "/api/redis/keys" | "/api/redis/set" | "/api/restart" | "/api/review" | "/api/review/[id]" | "/api/review/[id]/comments" | "/api/review/[id]/replies" | "/api/review/identify" | "/api/review/order" | "/api/review/share-info" | "/api/review/users" | "/api/scheduled-tasks" | "/api/services/config" | "/api/services/scripts" | "/api/session-by-path" | "/api/session/[sessionId]/fork" | "/api/session/[sessionId]/history" | "/api/session/[sessionId]/turn" | "/api/session/user-messages" | "/api/sessions" | "/api/sessions/delegate" | "/api/sessions/projects" | "/api/sessions/projects/[encodedPath]" | "/api/sessions/search" | "/api/sessions/status" | "/api/settings" | "/api/shutdown" | "/api/skills" | "/api/skills/[id]" | "/api/skills/content" | "/api/snapshots" | "/api/snapshots/blob" | "/api/snapshots/diff" | "/api/terminal/aliases" | "/api/terminal/autocomplete" | "/api/terminal/bubble-order" | "/api/terminal/env" | "/api/terminal/history" | "/api/update" | "/api/update-state" | "/api/version" | "/apps/[...path]"
6
6
  type PageRoutes = never
7
7
  type LayoutRoutes = "/"
8
8
  type RedirectRoutes = never
@@ -14,6 +14,8 @@ interface ParamMap {
14
14
  "/": {}
15
15
  "/api/agent/test": {}
16
16
  "/api/bash": {}
17
+ "/api/bots": {}
18
+ "/api/bots/[id]": { "id": string; }
17
19
  "/api/chat": {}
18
20
  "/api/chat/codex": {}
19
21
  "/api/chat/deepseek": {}
@@ -101,6 +101,24 @@ type RouteHandlerConfig<Route extends AppRouteHandlerRoutes = AppRouteHandlerRou
101
101
  type __Unused = __Check
102
102
  }
103
103
 
104
+ // Validate ../../src/app/api/bots/[id]/route.ts
105
+ {
106
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/bots/[id]">> = Specific
107
+ const handler = {} as typeof import("../../src/app/api/bots/[id]/route.js")
108
+ type __Check = __IsExpected<typeof handler>
109
+ // @ts-ignore
110
+ type __Unused = __Check
111
+ }
112
+
113
+ // Validate ../../src/app/api/bots/route.ts
114
+ {
115
+ type __IsExpected<Specific extends RouteHandlerConfig<"/api/bots">> = Specific
116
+ const handler = {} as typeof import("../../src/app/api/bots/route.js")
117
+ type __Check = __IsExpected<typeof handler>
118
+ // @ts-ignore
119
+ type __Unused = __Check
120
+ }
121
+
104
122
  // Validate ../../src/app/api/chat/codex/route.ts
105
123
  {
106
124
  type __IsExpected<Specific extends RouteHandlerConfig<"/api/chat/codex">> = Specific
package/README.md CHANGED
@@ -46,6 +46,7 @@ Cockpit is the instrument panel. It does **not** replace Claude Code; it stands
46
46
  | One session at a time, terminal chaos at 3+ projects | **Multi-project tabs**, parallel agent sessions, red-dot inbox, desktop notifications |
47
47
  | Image attachments are awkward | Drop / paste images straight into chat |
48
48
  | "What was I debugging yesterday?" | Cmd+K cross-project session browser, pinning, forking; `/ss` finds any past session from one sentence |
49
+ | Every subagent starts with a blank slate | **Bots**: persistent, file-native subagents you tag with `@name`; each runs in its own inspectable session |
49
50
  | Agent can't reach your browser / DB | **Smart Bubbles**: Chrome, PostgreSQL, MySQL, Redis — drivable by the agent |
50
51
  | Reading an unfamiliar repo means a 90-min file-tree scavenger hunt | **Code Map** chip view — caller / callee pins, click to walk the call graph |
51
52
  | Reviewing AI output is friction | **LAN-shared review pages**, line-level comments, send any comment back as AI context |
@@ -99,6 +100,7 @@ An honest snapshot as of July 2026 — each tool wins somewhere. Spotted an erro
99
100
  - Session **pinning, forking**, cross-project session browser (Cmd+K)
100
101
  - `/ss` — **find any past session** (any project, engine or date) from a one-line description; the reply links straight to it
101
102
  - `/dl` — **delegate a sub-task** to a new session in another directory and/or on another engine, without waiting; ask later how it went
103
+ - **Bots** — tag a persistent, file-native subagent with `@name`; it runs in a separate session with its own identity, context, commitments, and Skills
102
104
  - **Per-tool-call snapshots** — every file-touching tool call is snapshotted (shadow git, fully local); review each reply's changes as a git-history-style timeline, including what `Bash` did
103
105
  - `!command` prefix to run shell from chat — output piped back as context
104
106
  - Image attachments, code references, token usage tracking
@@ -151,9 +153,20 @@ An honest snapshot as of July 2026 — each tool wins somewhere. Spotted an erro
151
153
  - Invoke with `/skill-name` from chat
152
154
  - All managed from a single Skills sidebar
153
155
 
156
+ ### Bots — persistent subagents
157
+
158
+ - Create a Bot with `/bot`, then register its ordinary local directory from the Bots panel or its `BOT.md`
159
+ - Tag it into any task with `@name`; every turn runs in a separate, inspectable session and returns a link
160
+ - Memory is deliberate: normal turns are read-only, and files change only when you explicitly ask to remember, update, correct, or forget
161
+ - Attach an existing Skill with `@name attach /path/to/SKILL.md`; review stale memory with `@name review`
162
+ - Bot directories stay local and portable Markdown — no hidden database, upload, or vendor lock-in
163
+
164
+ [Read the Bots documentation](https://opencockpit.dev/en/docs/agent/bots/).
165
+
154
166
  ## Use cases
155
167
 
156
168
  - **Solo dev, multi-repo:** "I have a refactor running in API, tests writing in Web, and a bug investigation in Pipeline — all at once, all visible."
169
+ - **A specialist that remembers:** tag `@product` for a roadmap decision today and again next month; it reads the same explicit, reviewable context without polluting the main chat.
157
170
  - **Day one in an unfamiliar repo:** Open it in Code Map, click through caller/callee pins, walk the auth flow in five clicks instead of a 90-minute file-tree scavenger hunt.
158
171
  - **Two-person team:** Senior reviews via LAN-shared review page, no GitHub PR round-trip needed for in-progress work.
159
172
  - **Team on a shared dev box:** self-host one Cockpit where the code lives — every teammate opens a browser, takes a seat, and runs their own AI sessions in their own project / worktree.
package/README.zh.md CHANGED
@@ -46,6 +46,7 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
46
46
  | 一次只能开一个会话,3+ 项目就乱 | **多项目标签页**、并发 Agent 会话、红点收件箱、桌面通知 |
47
47
  | 图片附件麻烦 | 拖拽 / 粘贴图片直接进对话 |
48
48
  | "我昨天调的那个 bug 在哪?" | Cmd+K 跨项目会话浏览,会话固定 / 分叉;`/ss` 一句话找回任意历史会话 |
49
+ | 每个子代理都从空白开始 | **Bots**:用 `@name` 叫进任务的持久化、文件原生子代理;每次都在可检查的独立会话中运行 |
49
50
  | Agent 够不到浏览器 / 数据库 | **智能气泡**:Chrome、PostgreSQL、MySQL、Redis —— Agent 可驱动 |
50
51
  | 读陌生仓库就是 90 分钟"找地鼠" | **代码地图(Code Map)** chip 视图 —— caller / callee pin 一点即跳 |
51
52
  | AI 输出审阅低效 | **局域网共享评审页**、行级评论、任意评论可回喂给 AI |
@@ -99,6 +100,7 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
99
100
  - 会话**固定 / 分叉**,跨项目会话浏览(Cmd+K)
100
101
  - `/ss` —— 一句话描述,**找回任意历史会话**(跨项目、跨引擎、不限日期),回复里直接给可打开的链接
101
102
  - `/dl` —— 把子任务**委派**给另一个目录 / 另一个引擎的新会话,不用等;之后随时问进展
103
+ - **Bots** —— 用 `@name` 叫进一个持久化、文件原生子代理;它在独立会话中带着自己的身份、上下文、承诺和 Skills 工作
102
104
  - **工具调用级快照** —— 每次碰文件的工具调用都会打快照(影子 git,全本地);按 git 历史式时间线逐调用审阅每条回复的变更,`Bash` 改了什么也看得到
103
105
  - `!command` 前缀直接执行 shell —— 输出回流为对话上下文
104
106
  - 图片附件、代码引用、Token 用量统计
@@ -151,9 +153,20 @@ Cockpit 就是那个仪表盘。它**不替代** Claude Code,而是站在官
151
153
  - 在对话中用 `/skill-name` 直接调用
152
154
  - 所有技能在统一 Skills 侧边栏管理
153
155
 
156
+ ### Bots —— 持久化子代理
157
+
158
+ - 用 `/bot` 创建 Bot,再从 Bots 面板或 `BOT.md` 注册这个普通本地目录
159
+ - 用 `@name` 叫它进任务;每轮都在独立、可检查的会话中运行,并返回链接
160
+ - 记忆是有意的:普通任务默认只读,只有明确要求记住、更新、纠正或删除时才改文件
161
+ - 用 `@name 装上 /path/to/SKILL.md` 关联现有 Skill;用 `@name 复盘一下` 检查过期记忆
162
+ - Bot 目录一直是本地、可迁移的 Markdown,没有隐藏数据库、上传或厂商锁定
163
+
164
+ [查看 Bots 文档](https://opencockpit.dev/zh/docs/agent/bots/)。
165
+
154
166
  ## 使用场景
155
167
 
156
168
  - **独立开发者多仓并行:** "API 在重构、Web 在写测试、Pipeline 在排 bug —— 同时跑、同时可见。"
169
+ - **一个真正记得住的专家:** 今天让 `@product` 记下路线图决策,下个月再叫它时读的还是同一份显式、可审阅上下文,不污染主会话。
157
170
  - **新仓库的第一天:** 用 Code Map 打开它,沿着 caller / callee pin 一路点过去 —— 鉴权流程 5 次点击就走完,不再是 90 分钟的"文件树找地鼠"。
158
171
  - **二人小团队:** Senior 用局域网共享评审页 review,半成品代码不用绕 GitHub PR。
159
172
  - **共享开发机团队:** 在代码所在的机器上自托管一个 Cockpit —— 队友打开浏览器就能一起飞,各自在自己的项目 / worktree 上跑 AI 会话。
package/bots/README.md ADDED
@@ -0,0 +1,86 @@
1
+ # Built-in Bots
2
+
3
+ One directory per Bot, each with a `BOT.md` at its root — the same shape a user's own
4
+ Bot has (`/bot` creates those). The **directory set IS the registry**: both consumers
5
+ derive from `listBuiltinBots()` in
6
+ `packages/feature/agent/src/server/lib/builtinBots.ts`, so adding a built-in Bot is
7
+ `mkdir` + files, with no TypeScript list to keep in sync.
8
+
9
+ This file is a file, not a directory, so the scan never sees it as a Bot.
10
+
11
+ **These directories are seeds, not homes.** Each one is installed into
12
+ `~/.cockpit/bots/<name>` on first listing, and *that copy* is the Bot: it is the path
13
+ the panel prints, the folder button opens and `@name` dispatch reads. Nothing is ever
14
+ written back here. See the module comment in `builtinBots.ts` for why, and read
15
+ "Staying up to date" below before assuming a copy goes stale.
16
+
17
+ ## What makes them different from registered Bots
18
+
19
+ | | built-in (`/bots`) | registered (`bot.json`) |
20
+ |---|---|---|
21
+ | discovered by | directory scan of the install root | absolute paths in `~/.cockpit/bot.json` |
22
+ | in the Bots panel | yes, with a "Built-in" chip, no delete button | yes, removable |
23
+ | `@name` dispatch | yes — and survives a corrupt `bot.json` | yes |
24
+ | lives in | `~/.cockpit/bots/<name>`, installed from the seed | wherever the user made it |
25
+ | writable | yes — it is an ordinary copy | yes |
26
+
27
+ Built-ins are merged into the listing at read time and never written into `bot.json`:
28
+ their path moves with the install (npm global dir vs repo checkout, and again per
29
+ `COCKPIT_HOME`), so a persisted row would become a dead entry the user cannot delete
30
+ after the next upgrade. On a name clash the built-in wins, and `POST /api/bots` with a
31
+ built-in's path reports it as already present rather than writing a row.
32
+
33
+ ## Staying up to date
34
+
35
+ The install root cannot host a Bot: it is root-owned under `npm i -g`, replaced
36
+ wholesale on upgrade, and shared by every `COCKPIT_HOME`, so a Bot living there could
37
+ not be opened, edited or written to. Hence the copy. The obvious cost of any copy is
38
+ drift — it stops receiving `BOT.md` updates the day it is made — and that is not paid
39
+ here, because the install is *tracked, file by file*.
40
+ `~/.cockpit/bots/.builtin-installs.json` holds the hash of every file installed, and
41
+ each one falls into one of four cases when a newer version ships:
42
+
43
+ | The file | On upgrade |
44
+ |---|---|
45
+ | still exactly as we wrote it | replaced with the new version |
46
+ | changed since we wrote it (by the user or by the Bot) | left alone, at this and every later version |
47
+ | gone from the new version, ours and untouched | deleted, so it stops instructing the Bot |
48
+ | never installed by us — the Bot's own memory | untouched, and not our business |
49
+
50
+ Per file, not per Bot, and the reason is memory: a Bot with memory writes into its own
51
+ directory on an ordinary turn, so judging the tree as a whole would read the first
52
+ remembered fact as "the user has taken this over" and cut the Bot off from every later
53
+ fix. Per file, memory lands in paths we never installed and the shipped files go on
54
+ being maintained. Deleting the folder resets everything and starts tracking afresh.
55
+
56
+ Updates are staged and swapped in whole, and are skipped entirely while a Bot session
57
+ holds `.locks/write` — nothing here is urgent enough to race a Bot mid-write.
58
+
59
+ Built-in *skills* solve the same problem differently — they rewrite their copy on
60
+ every dispatch — which works only because a skill directory has no user state in it.
61
+ A Bot's directory does, which is why this one compares before it writes.
62
+
63
+ ## Memory
64
+
65
+ A built-in Bot's directory is writable like any other, so `bot-turn`'s writing protocol
66
+ applies unchanged and a built-in may keep memory. Two things are true of a built-in's
67
+ memory in particular, and its `BOT.md` is the only place they can be said:
68
+
69
+ - **It lives in that user's copy only.** Nothing is shared between installs, and
70
+ nothing comes back to this repository.
71
+ - **What must never be recorded is Bot-specific.** `writing.md` already rules out
72
+ anything re-readable from the source system; each built-in has to name what its
73
+ source system is. `cockpit-helper` names opencockpit.dev — it remembers the person
74
+ it works with, and never the site, because the site is always its own newest copy
75
+ one fetch away while a stored copy is a stale answer waiting to be given.
76
+
77
+ A built-in that has nothing worth remembering should say so in its `BOT.md` rather
78
+ than leaving the question open: an empty `memory/` invites a session to fill it.
79
+
80
+ ## Adding one
81
+
82
+ 1. `mkdir bots/<name>` with a `BOT.md` (frontmatter: `name`, `description` — the
83
+ description is what `@` autocomplete shows). The directory name is the `@name` and
84
+ the installed folder name, so it must match the frontmatter `name`.
85
+ 2. Say in it whether the Bot keeps memory, as `cockpit-helper/BOT.md` does.
86
+ 3. Nothing else. `package.json#files` already ships `bots`, and no list needs editing.