@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
@@ -14,7 +14,7 @@ import {
14
14
  getTerminalOutputPath,
15
15
  readJsonFile,
16
16
  writeJsonFile
17
- } from "./chunk-JJWVBF6H.mjs";
17
+ } from "./chunk-BCWVTDEZ.mjs";
18
18
 
19
19
  // packages/feature/console/src/server/plugins/browser/BrowserBridge.ts
20
20
  import { WebSocket } from "ws";
package/dist/httpApi.mjs CHANGED
@@ -27,10 +27,10 @@ import {
27
27
  unregisterBrowser,
28
28
  unregisterTerminal,
29
29
  writeStdinToCommand
30
- } from "./chunk-6R4AHIIV.mjs";
30
+ } from "./chunk-QY2K7YIF.mjs";
31
31
  import {
32
32
  getTerminalHistoryPath
33
- } from "./chunk-JJWVBF6H.mjs";
33
+ } from "./chunk-BCWVTDEZ.mjs";
34
34
  import "./chunk-7P6ASYW6.mjs";
35
35
 
36
36
  // src/lib/httpApi.ts
@@ -17,11 +17,12 @@ import {
17
17
  isRunActive,
18
18
  mutateJsonFile,
19
19
  readJsonFile,
20
+ readJsonFileForUpdate,
20
21
  requestStop,
21
22
  updateGlobalState,
22
23
  withFileLock,
23
24
  writeJsonFile
24
- } from "./chunk-JJWVBF6H.mjs";
25
+ } from "./chunk-BCWVTDEZ.mjs";
25
26
  import "./chunk-7P6ASYW6.mjs";
26
27
 
27
28
  // packages/feature/agent/src/server/scheduledTasks.ts
@@ -254,7 +255,8 @@ var en_default = {
254
255
  reloadNow: "Reload",
255
256
  upgradeCommandCopied: "Copied `cockpit update`",
256
257
  projectNotes: "Project Notes",
257
- closeProject: "Close project"
258
+ closeProject: "Close project",
259
+ bots: "Bots"
258
260
  },
259
261
  mobile: {
260
262
  useDesktop: "Desktop",
@@ -601,7 +603,7 @@ var en_default = {
601
603
  codexResumeFailed: "Previous session is in use by another Codex client \u2014 started a new session; history was not carried over",
602
604
  codexResumeFailedPrevious: "Previous session",
603
605
  codexResumeFailedNew: "New session",
604
- placeholder: "Type a message, Enter to send (Shift+Enter for new line, paste images; start a line with / (main session) or @ (subagent) for commands, multiple allowed)",
606
+ placeholder: "Type a message, Enter to send (Shift+Enter for new line, paste images; start a line with / (skill), /@ (skill in a subagent) or @ (bot in a subagent), multiple allowed)",
605
607
  placeholderDisabled: "Generating... you can keep typing (ESC to cancel; if stuck, cancel and resend 'continue')",
606
608
  imageSizeLimit: "Image size exceeds limit (max 5MB), current: {{size}}MB",
607
609
  viewGitChanges: "View Git changes",
@@ -1342,6 +1344,29 @@ var en_default = {
1342
1344
  reviewUtils: {
1343
1345
  adjectives: ["Happy", "Brave", "Quiet", "Bright", "Gentle", "Agile", "Free", "Clear", "Flying", "Relaxed", "Lively", "Wise", "Calm", "Alert", "Composed", "Steady", "Cheerful", "Warm", "Bold", "Poised"],
1344
1346
  nouns: ["Panda", "Dolphin", "Crane", "Snow Leopard", "Skylark", "Squirrel", "Flying Fish", "Deer", "Bluebird", "Silver Fox", "Owl", "Dragonfly", "Firefly", "Sea Turtle", "Butterfly", "Monkey", "Red-crowned Crane", "Antelope", "Swallow", "Penguin"]
1347
+ },
1348
+ bots: {
1349
+ title: "Bots",
1350
+ search: "Search bots",
1351
+ addExisting: "Add bot",
1352
+ addTooltip: "Add as Bot",
1353
+ emptyNoMatch: "No bots match your search.",
1354
+ emptyNoBots: "No bots of your own yet.",
1355
+ emptyCreatePrefix: "Use",
1356
+ emptyCreateSuffix: "in chat to create one.",
1357
+ emptyAddExisting: "add an existing Bot directory",
1358
+ invalid: "Invalid",
1359
+ builtin: "Built-in",
1360
+ remove: "Remove registration",
1361
+ open: "Open as project",
1362
+ pathPlaceholder: "Absolute path to a Bot directory or its BOT.md",
1363
+ addHint: "The directory must contain a BOT.md. Its files are not changed.",
1364
+ added: "Bot added",
1365
+ alreadyAdded: "Already added",
1366
+ removed: "Bot removed; its files were kept.",
1367
+ loadFailed: "Failed to load bots",
1368
+ saveFailed: "Failed to add bot",
1369
+ removeFailed: "Failed to remove bot"
1345
1370
  }
1346
1371
  };
1347
1372
 
@@ -1569,7 +1594,8 @@ var zh_default = {
1569
1594
  reloadNow: "\u5237\u65B0",
1570
1595
  upgradeCommandCopied: "\u5DF2\u590D\u5236 `cockpit update`",
1571
1596
  projectNotes: "\u9879\u76EE\u7B14\u8BB0",
1572
- closeProject: "\u5173\u95ED\u9879\u76EE"
1597
+ closeProject: "\u5173\u95ED\u9879\u76EE",
1598
+ bots: "\u673A\u5668\u4EBA"
1573
1599
  },
1574
1600
  mobile: {
1575
1601
  useDesktop: "\u684C\u9762\u7248",
@@ -1916,7 +1942,7 @@ var zh_default = {
1916
1942
  codexResumeFailed: "\u539F\u4F1A\u8BDD\u88AB\u5176\u4ED6 Codex \u5BA2\u6237\u7AEF\u5360\u7528\uFF0C\u5DF2\u65B0\u5EFA\u4F1A\u8BDD\uFF0C\u5386\u53F2\u672A\u7EE7\u627F",
1917
1943
  codexResumeFailedPrevious: "\u539F\u4F1A\u8BDD",
1918
1944
  codexResumeFailedNew: "\u65B0\u4F1A\u8BDD",
1919
- placeholder: "\u8F93\u5165\u6D88\u606F\uFF0CEnter \u53D1\u9001\uFF08Shift+Enter \u6362\u884C\uFF0C\u53EF\u7C98\u8D34\u56FE\u7247\uFF1B\u884C\u9996 /\uFF08\u4E3B\u4F1A\u8BDD\uFF09\u6216 @\uFF08\u5B50\u4EE3\u7406\uFF09\u5524\u8D77\u547D\u4EE4\uFF0C\u652F\u6301\u591A\u884C\u591A\u547D\u4EE4\uFF09",
1945
+ placeholder: "\u8F93\u5165\u6D88\u606F\uFF0CEnter \u53D1\u9001\uFF08Shift+Enter \u6362\u884C\uFF0C\u53EF\u7C98\u8D34\u56FE\u7247\uFF1B\u884C\u9996 /\uFF08skill\uFF09\u3001/@\uFF08\u5B50\u4EE3\u7406\u6267\u884C skill\uFF09\u6216 @\uFF08\u5B50\u4EE3\u7406\u6267\u884C\u673A\u5668\u4EBA\uFF09\uFF0C\u652F\u6301\u591A\u884C\u591A\u547D\u4EE4\uFF09",
1920
1946
  placeholderDisabled: "\u751F\u6210\u4E2D... \u53EF\u7EE7\u7EED\u8F93\u5165 (ESC \u53D6\u6D88;\u5361\u4F4F\u592A\u4E45\u53EF\u53D6\u6D88\u540E\u91CD\u53D1\u300C\u7EE7\u7EED\u300D)",
1921
1947
  imageSizeLimit: "\u56FE\u7247\u5927\u5C0F\u8D85\u8FC7\u9650\u5236\uFF08\u6700\u5927 5MB\uFF09\uFF0C\u5F53\u524D\u5927\u5C0F: {{size}}MB",
1922
1948
  viewGitChanges: "\u67E5\u770B Git \u53D8\u66F4",
@@ -2657,6 +2683,29 @@ var zh_default = {
2657
2683
  reviewUtils: {
2658
2684
  adjectives: ["\u5FEB\u4E50", "\u52C7\u6562", "\u5B89\u9759", "\u660E\u4EAE", "\u6E29\u67D4", "\u7075\u5DE7", "\u81EA\u7531", "\u6E05\u6F88", "\u98DE\u7FD4", "\u60A0\u95F2", "\u6D3B\u6CFC", "\u806A\u6167", "\u6DE1\u5B9A", "\u673A\u654F", "\u4ECE\u5BB9", "\u575A\u5B9A", "\u723D\u6717", "\u548C\u7166", "\u5954\u653E", "\u6C89\u7A33"],
2659
2685
  nouns: ["\u718A\u732B", "\u6D77\u8C5A", "\u767D\u9E64", "\u96EA\u8C79", "\u4E91\u96C0", "\u677E\u9F20", "\u98DE\u9C7C", "\u6885\u82B1\u9E7F", "\u9752\u9E1F", "\u94F6\u72D0", "\u732B\u5934\u9E70", "\u873B\u8713", "\u8424\u706B\u866B", "\u6D77\u9F9F", "\u8774\u8776", "\u91D1\u4E1D\u7334", "\u4E39\u9876\u9E64", "\u7F9A\u7F8A", "\u71D5\u5B50", "\u4F01\u9E45"]
2686
+ },
2687
+ bots: {
2688
+ title: "\u673A\u5668\u4EBA",
2689
+ search: "\u641C\u7D22\u673A\u5668\u4EBA",
2690
+ addExisting: "\u6DFB\u52A0\u673A\u5668\u4EBA",
2691
+ addTooltip: "\u6DFB\u52A0\u4E3A\u673A\u5668\u4EBA",
2692
+ emptyNoMatch: "\u6CA1\u6709\u5339\u914D\u7684\u673A\u5668\u4EBA\u3002",
2693
+ emptyNoBots: "\u8FD8\u6CA1\u6709\u4F60\u81EA\u5DF1\u7684\u673A\u5668\u4EBA\u3002",
2694
+ emptyCreatePrefix: "\u5728\u804A\u5929\u91CC\u4F7F\u7528",
2695
+ emptyCreateSuffix: "\u521B\u5EFA\u4E00\u4E2A\u3002",
2696
+ emptyAddExisting: "\u6DFB\u52A0\u5DF2\u6709\u7684\u673A\u5668\u4EBA\u76EE\u5F55",
2697
+ invalid: "\u65E0\u6548",
2698
+ builtin: "\u5185\u7F6E",
2699
+ remove: "\u79FB\u9664\u6CE8\u518C",
2700
+ open: "\u4F5C\u4E3A\u9879\u76EE\u6253\u5F00",
2701
+ pathPlaceholder: "\u673A\u5668\u4EBA\u76EE\u5F55\u6216\u5176 BOT.md \u7684\u7EDD\u5BF9\u8DEF\u5F84",
2702
+ addHint: "\u76EE\u5F55\u4E2D\u5FC5\u987B\u5305\u542B BOT.md\uFF0C\u4E0D\u4F1A\u6539\u52A8\u5176\u4E2D\u7684\u6587\u4EF6\u3002",
2703
+ added: "\u673A\u5668\u4EBA\u5DF2\u6DFB\u52A0",
2704
+ alreadyAdded: "\u5DF2\u6DFB\u52A0\u8FC7",
2705
+ removed: "\u5DF2\u79FB\u9664\u673A\u5668\u4EBA\u6CE8\u518C\uFF0C\u76EE\u5F55\u6587\u4EF6\u4ECD\u4FDD\u7559\u3002",
2706
+ loadFailed: "\u52A0\u8F7D\u673A\u5668\u4EBA\u5931\u8D25",
2707
+ saveFailed: "\u6DFB\u52A0\u673A\u5668\u4EBA\u5931\u8D25",
2708
+ removeFailed: "\u79FB\u9664\u673A\u5668\u4EBA\u5931\u8D25"
2660
2709
  }
2661
2710
  };
2662
2711
 
@@ -2852,6 +2901,8 @@ var ScheduledTaskManager = class {
2852
2901
  this.firing = /* @__PURE__ */ new Set();
2853
2902
  this.initialized = false;
2854
2903
  this.initPromise = null;
2904
+ /** Set when the task file exists but does not parse; see init(). */
2905
+ this.loadFailed = false;
2855
2906
  this.onTaskFired = null;
2856
2907
  }
2857
2908
  /**
@@ -2871,7 +2922,17 @@ var ScheduledTaskManager = class {
2871
2922
  async init() {
2872
2923
  if (this.initialized) return;
2873
2924
  this.initialized = true;
2874
- this.tasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
2925
+ try {
2926
+ this.tasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
2927
+ } catch (error) {
2928
+ this.loadFailed = true;
2929
+ this.tasks = [];
2930
+ console.error(
2931
+ `[ScheduledTaskManager] ${SCHEDULED_TASKS_FILE} could not be read \u2014 NO scheduled task will fire until it is fixed. The file has been left untouched:`,
2932
+ error
2933
+ );
2934
+ return;
2935
+ }
2875
2936
  console.log(`[ScheduledTaskManager] Loaded ${this.tasks.length} scheduled tasks`);
2876
2937
  for (const task of this.tasks) {
2877
2938
  if (!task.paused && !task.completed) {
@@ -2880,6 +2941,10 @@ var ScheduledTaskManager = class {
2880
2941
  }
2881
2942
  await this.saveToDisk();
2882
2943
  }
2944
+ /** True when init() could not parse the task file: no timers, and no writes. */
2945
+ isLoadFailed() {
2946
+ return this.loadFailed;
2947
+ }
2883
2948
  /**
2884
2949
  * Register a task-fired callback (used for WS broadcast).
2885
2950
  */
@@ -2890,7 +2955,7 @@ var ScheduledTaskManager = class {
2890
2955
  * Read tasks from disk (avoids in-memory inconsistency between dual module instances).
2891
2956
  */
2892
2957
  async readTasksFromDisk() {
2893
- return readJsonFile(SCHEDULED_TASKS_FILE, []);
2958
+ return readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
2894
2959
  }
2895
2960
  /**
2896
2961
  * Return all tasks for the current instance (reads from disk each time to ensure cross-instance consistency).
@@ -2928,7 +2993,7 @@ var ScheduledTaskManager = class {
2928
2993
  async updateTask(id, fields) {
2929
2994
  await this.ensureInit();
2930
2995
  const task = await withFileLock(SCHEDULED_TASKS_FILE, async () => {
2931
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
2996
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
2932
2997
  const idx = allTasks.findIndex((t) => t.id === id);
2933
2998
  if (idx === -1) return null;
2934
2999
  const updated = { ...allTasks[idx], ...fields };
@@ -2953,7 +3018,7 @@ var ScheduledTaskManager = class {
2953
3018
  async deleteTask(id) {
2954
3019
  await this.ensureInit();
2955
3020
  const removed = await withFileLock(SCHEDULED_TASKS_FILE, async () => {
2956
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
3021
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
2957
3022
  const idx = allTasks.findIndex((t) => t.id === id);
2958
3023
  if (idx === -1) return false;
2959
3024
  allTasks.splice(idx, 1);
@@ -2978,7 +3043,7 @@ var ScheduledTaskManager = class {
2978
3043
  * Resume a task.
2979
3044
  */
2980
3045
  async resumeTask(id) {
2981
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
3046
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
2982
3047
  const task = allTasks.find((t) => t.id === id);
2983
3048
  if (!task) return null;
2984
3049
  const now = Date.now();
@@ -3005,7 +3070,7 @@ var ScheduledTaskManager = class {
3005
3070
  */
3006
3071
  async triggerTask(id) {
3007
3072
  await this.ensureInit();
3008
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
3073
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
3009
3074
  const task = allTasks.find((t) => t.id === id);
3010
3075
  if (!task) return false;
3011
3076
  const memIdx = this.tasks.findIndex((t) => t.id === id);
@@ -3059,7 +3124,7 @@ var ScheduledTaskManager = class {
3059
3124
  async markReadBySessionId(sessionId) {
3060
3125
  await this.ensureInit();
3061
3126
  await withFileLock(SCHEDULED_TASKS_FILE, async () => {
3062
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
3127
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
3063
3128
  let changed = false;
3064
3129
  for (const task of allTasks) {
3065
3130
  if (task.sessionId === sessionId && task.unread) {
@@ -3076,7 +3141,7 @@ var ScheduledTaskManager = class {
3076
3141
  async markAllRead() {
3077
3142
  await this.ensureInit();
3078
3143
  await withFileLock(SCHEDULED_TASKS_FILE, async () => {
3079
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
3144
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
3080
3145
  let changed = false;
3081
3146
  for (const task of allTasks) {
3082
3147
  if (task.unread) {
@@ -3093,7 +3158,7 @@ var ScheduledTaskManager = class {
3093
3158
  async reorderTasks(orderedIds) {
3094
3159
  await this.ensureInit();
3095
3160
  await withFileLock(SCHEDULED_TASKS_FILE, async () => {
3096
- const allTasks = await readJsonFile(SCHEDULED_TASKS_FILE, []);
3161
+ const allTasks = await readJsonFileForUpdate(SCHEDULED_TASKS_FILE, []);
3097
3162
  for (let i = 0; i < orderedIds.length; i++) {
3098
3163
  const task = allTasks.find((t) => t.id === orderedIds[i]);
3099
3164
  if (task) task.sortIndex = i;
@@ -3209,6 +3274,7 @@ var ScheduledTaskManager = class {
3209
3274
  }
3210
3275
  }
3211
3276
  async saveToDisk() {
3277
+ if (this.loadFailed) return;
3212
3278
  try {
3213
3279
  await mutateJsonFile(SCHEDULED_TASKS_FILE, [], () => [...this.tasks]);
3214
3280
  } catch (error) {
package/dist/wsServer.mjs CHANGED
@@ -13,7 +13,7 @@ import {
13
13
  resolvePendingRequest,
14
14
  unregisterBrowser,
15
15
  writeStdinToCommand
16
- } from "./chunk-6R4AHIIV.mjs";
16
+ } from "./chunk-QY2K7YIF.mjs";
17
17
  import {
18
18
  Effect_exports,
19
19
  FSError,
@@ -33,7 +33,7 @@ import {
33
33
  recoverStashedCodexRollouts,
34
34
  recoverStashedTranscripts,
35
35
  sanitizedSpawnEnv
36
- } from "./chunk-JJWVBF6H.mjs";
36
+ } from "./chunk-BCWVTDEZ.mjs";
37
37
  import {
38
38
  registerWatcherSubscriber,
39
39
  subscribeBuildProgress
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@surething/cockpit",
3
- "version": "1.0.275",
3
+ "version": "1.0.276",
4
4
  "description": "OpenCockpit is the open-source Claude Code GUI — an IDE-like workbench for parallel AI coding. Drive Claude (default), Codex, DeepSeek, Kimi, or local Ollama in tabs. Terminal, browser & DB bubbles, code review. Self-host on a shared dev box — a seat for every teammate. Local-first, MIT.",
5
5
  "author": "Robert",
6
6
  "license": "MIT",
@@ -68,6 +68,7 @@
68
68
  "bin",
69
69
  "chrome-extension",
70
70
  "apps",
71
+ "bots",
71
72
  "!**/*.test.*",
72
73
  "!**/*.spec.*",
73
74
  "public",
package/skills/README.md CHANGED
@@ -21,10 +21,17 @@ sets `COCKPIT_ROOT` to the package root), then:
21
21
  *is* the registry, for both dispatch and the `/api/commands` autocomplete
22
22
  dropdown (whose description text comes from each file's frontmatter).
23
23
  2. On dispatch the file is read, `{{BASE_URL}}` is substituted with
24
- `http://localhost:<port>`, and the result is written to
24
+ `http://localhost:<port>` and `{{COCKPIT_DIR}}` with the resolved data
25
+ directory (`$COCKPIT_HOME`, default `~/.cockpit`), and the result is written to
25
26
  `~/.cockpit/skills/<cmd>/SKILL.md` — the copy the agent is pointed at, so
26
27
  builtins travel the same "read this skill file" path as user skills.
27
- 3. A user-registered skill with the same `name` shadows the builtin.
28
+ 3. Any **other** `*.md` in `skills/<cmd>/` is copied next to it with the same
29
+ substitution. These are reference files, not commands — step 1 keys on
30
+ directories holding a `SKILL.md`, so adding one never registers a verb.
31
+ A SKILL.md points at `{{COCKPIT_DIR}}/skills/<cmd>/<file>.md` to defer the
32
+ part most invocations do not need (`bot-turn` keeps its write lock and its
33
+ review checklist out of every ordinary Bot turn this way).
34
+ 4. A user-registered skill with the same `name` shadows the builtin.
28
35
 
29
36
  Edits take effect on the next dispatch — no rebuild, no restart.
30
37
 
@@ -35,6 +42,9 @@ Edits take effect on the next dispatch — no rebuild, no restart.
35
42
  ```yaml
36
43
  ---
37
44
  name: <cmd> # MUST equal the directory name
45
+ hidden: true # optional — machinery, not a command to type: still
46
+ # dispatchable and still read by whoever references it,
47
+ # just left out of the `/` autocomplete (see bot-run)
38
48
  description: <one line — this is verbatim what the autocomplete dropdown
39
49
  shows; it is NOT translated, and must not be given an
40
50
  i18n commands.<cmd> key, which would silently override it>
@@ -44,6 +54,12 @@ Edits take effect on the next dispatch — no rebuild, no restart.
44
54
 
45
55
  2. Body is English prose. Use `{{BASE_URL}}` for any URL the agent must curl
46
56
  on the server host.
57
+
58
+ Split it when one part is long and rarely needed: put that part in
59
+ `skills/<cmd>/<file>.md` and have SKILL.md name the absolute path plus the
60
+ condition for opening it. Keep the *consequence* of not opening it in
61
+ SKILL.md — a deferred rule the model never learns it should fetch is the
62
+ same as a deleted one.
47
63
  3. That's it — no TypeScript to touch. Both the dropdown and the dispatcher
48
64
  pick it up from the directory.
49
65
 
@@ -0,0 +1,155 @@
1
+ ---
2
+ name: bot
3
+ description: "Create a Bot: a plain directory with BOT.md and long-term context, addressed as @name."
4
+ argument-hint: "[what the Bot is for]"
5
+ ---
6
+
7
+ # Creating a Bot
8
+
9
+ A **Bot** is a plain directory with a `BOT.md` at its root. Once registered, a line starting with
10
+ `@name` in any chat is handed to a session of its own, which reads `BOT.md` and uses the Bot's
11
+ files as its long-term context. Its files change only when the user explicitly asks (remember /
12
+ update / correct / forget), under a short write lock, so parallel sessions keep reading freely.
13
+
14
+ **This skill does one thing: create a new Bot.** Everything you can do *to* an existing Bot is
15
+ addressed to the Bot itself, not to this command — `@name review` to sweep it, `@name attach <path
16
+ to SKILL.md>` to give it a tool, `@name export to <path>` to make a shareable copy with no memory
17
+ in it, `@name <task>` for ordinary work. That is where those instructions live too, so they
18
+ improve for every existing Bot at once. If the request is about a Bot that already exists, say
19
+ which `@name` line does it and stop.
20
+
21
+ **Cloning one is not an exception.** "Copy this Bot", "make me another one like it", "turn it into
22
+ a template" all operate on a Bot that exists, so they are `@name export to <path>` — and they need
23
+ a session that has read the whole source directory to tell a general procedure from this user's
24
+ private memory. Say that line and stop; do not scaffold a copy from here.
25
+
26
+ `curl -s {{BASE_URL}}/api/bots` lists registered Bots with their `name`, `description` and
27
+ absolute `path` — use it to check a new name for clashes.
28
+
29
+ ## 1. Create: align first, write only after confirmation
30
+
31
+ 1. **Align on the Bot** — restate in a few lines what this Bot is for: its role, what it
32
+ should remember, and what it is responsible for keeping up to date. Ask back only when the
33
+ request is genuinely ambiguous.
34
+ 2. **Tell the name and directory** — resolve both and state them exactly:
35
+ - **You pick `<name>`** from the request: lowercase letters, digits and `-`, starting with a
36
+ letter or digit (it becomes the `@name` mention). Check it against the registry above.
37
+ - The user gave a directory → `<that directory>/<name>/`; none given →
38
+ `{{COCKPIT_DIR}}/bots/<name>/`.
39
+ - The target must not already exist, or must be empty. Never overwrite an existing directory.
40
+ 3. **Write only after confirmation** — once the user agrees, create the files below with
41
+ `Write`.
42
+ 4. **Hand over registration** — do NOT register it yourself. Tell the user the directory
43
+ path and the two ways to add it: open the **Bots** panel → **Add bot** and paste the path,
44
+ or open `BOT.md` in the file explorer and click its **Add as Bot** button.
45
+ 5. **Say what it can now be asked**, in four lines — this is the only place the user learns the
46
+ verbs, since `@` autocomplete shows only the description:
47
+ - `@<name> <task>` — ordinary work, in its own session, with its files as context
48
+ - `@<name> review` — a sweep for stale entries, contradictions and dangling commitments
49
+ - `@<name> attach <path to SKILL.md>` — teach it a tool it may use
50
+ - `@<name> export to <path>` — a new Bot at that path with the manual and skills but none of
51
+ the memory, to hand to someone else
52
+
53
+ Say them in the user's own language if they wrote in another one — each mode answers to the
54
+ phrasings listed at the top of its `bot-turn` file, English and Chinese alike.
55
+
56
+ ## 2. Layout
57
+
58
+ ```text
59
+ <name>/
60
+ ├── BOT.md # manifest + operating manual (the subagent reads this first)
61
+ ├── identity/
62
+ │ ├── persona.md # stable role, voice, scope
63
+ │ └── principles.md # operating principles and boundaries
64
+ ├── relationships/
65
+ │ └── user.md # confirmed preferences of the people it works with
66
+ ├── memory/
67
+ │ ├── facts.md # durable, verified facts
68
+ │ └── procedures.md # procedures proven by successful execution
69
+ ├── projects/ # created on demand: projects/<project-name>/CONTEXT.md
70
+ ├── skills/ # created on demand: this Bot's own SKILL.md files
71
+ ├── commitments/
72
+ │ └── active.md # open promises and follow-ups
73
+ ├── evidence/
74
+ │ └── refs.md # sources backing the entries above
75
+ └── secrets/ # only if this Bot has credentials of its own — never read, never printed
76
+ ```
77
+
78
+ Two more directories appear on their own and are never scaffolded: `.locks/` (the write lock) and
79
+ `.reviews/` (one uniquely timestamped file per review sweep). Both are work products, never memory — nothing
80
+ reads them as fact.
81
+
82
+ Credentials belong to the tool, not to the Bot: a skill's `.env` files stay next to that skill, so
83
+ several Bots share one copy and no key is duplicated. `<bot>/secrets/` is for the rare case where
84
+ the credential really is this Bot's own (its own account). Either way it is gitignored when the
85
+ directory is a repository.
86
+
87
+ Seed `identity/persona.md` and `identity/principles.md` from what the user told you. Every
88
+ other file starts as a heading plus a one-line HTML comment describing its purpose — never
89
+ invent facts, preferences, or history.
90
+
91
+ ## 3. BOT.md
92
+
93
+ Frontmatter is only `name` and `description` (the description is what the `@` autocomplete shows).
94
+
95
+ The body says **who this Bot is** — its role, which of its files to read, which skills it has, and
96
+ where new entries belong. It does NOT restate how a Bot turn works: reading rules, entry format,
97
+ the write lock, the non-recording list and the reporting rules all live in the hidden `bot-turn`
98
+ skill, which is handed to the session alongside this file. Keep it that way. Anything written here
99
+ is copied into every Bot and frozen on the user's disk; anything in `bot-turn` is fixed once and
100
+ every existing Bot gets the fix. Put in `BOT.md` only what would be wrong in another Bot's.
101
+
102
+ ````markdown
103
+ ---
104
+ name: <name>
105
+ description: "<one line: what this Bot knows and maintains>"
106
+ ---
107
+
108
+ # <name>
109
+
110
+ <one paragraph: role and scope>
111
+
112
+ ## Before working
113
+
114
+ Read, relative to this file's directory:
115
+
116
+ - identity/persona.md and identity/principles.md — always
117
+ - relationships/user.md and commitments/active.md — always
118
+ - memory/facts.md and memory/procedures.md — when relevant to the task
119
+ - projects/<project-name>/CONTEXT.md — when the task concerns that project
120
+ - the Skills table below — always; resolve and open a row's SKILL.md only when the task matches it
121
+
122
+ Reading rules, entry format, when writing is allowed, the write lock and the reporting rules are
123
+ the same for every Bot: they are in the `bot-turn` skill you were handed with this file. If you do
124
+ not have it, say so rather than inventing a protocol — especially the write lock.
125
+
126
+ ## Skills
127
+
128
+ | Skill | When to use | Where |
129
+ |---|---|---|
130
+ | <name> | <the kind of task it applies to> | <the registered skill's name, or a path relative to this directory for one of this Bot's own> |
131
+
132
+ ## Updating
133
+
134
+ Only when the task explicitly asks to remember, update, correct or forget something (`bot-turn`
135
+ §3–§4 covers the rest: metadata, what never gets recorded, the write lock). Where things go in
136
+ this Bot:
137
+
138
+ - a confirmed fact or a correction → memory/facts.md (mark the old entry `status: superseded` or replace it; never leave a contradiction)
139
+ - a decision and its reason → memory/facts.md under `## Decisions`, dated
140
+ - a user preference → relationships/user.md
141
+ - a promise made or completed → commitments/active.md, with `done-when`, `waiting-on` and
142
+ `next-check` (`status: done` or `cancelled` when it ends)
143
+ - a procedure that just worked → memory/procedures.md
144
+ - project status changes → projects/<project-name>/CONTEXT.md, where `<project-name>` is the
145
+ project's name in lowercase kebab-case (by default its root directory name); reuse an existing
146
+ directory for the same project instead of creating a second one
147
+ - where the information came from → evidence/refs.md
148
+
149
+ <Anything that is true of THIS Bot only: a file it must never touch, a project whose CONTEXT.md
150
+ is authoritative, a person whose word settles a question.>
151
+ ````
152
+
153
+ Adapt the lists to the Bot's purpose, but keep the sections: together with `bot-turn` they are the
154
+ only contract between the Bot and whoever runs it. Resist copying any of `bot-turn` back in here —
155
+ a frozen copy is exactly what this split exists to prevent.