@meetquinn/animactl 0.1.2 → 0.1.3

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 (289) hide show
  1. package/README.md +11 -6
  2. package/dist/server/{runtime/activity-payload.d.ts → activities/format.d.ts} +4 -1
  3. package/dist/server/activities/format.d.ts.map +1 -0
  4. package/dist/server/{runtime/activity-payload.js → activities/format.js} +16 -1
  5. package/dist/server/agents/agent-skills.d.ts +7 -3
  6. package/dist/server/agents/agent-skills.d.ts.map +1 -1
  7. package/dist/server/agents/agent-skills.js +243 -38
  8. package/dist/server/agents/agent-slack.service.d.ts +15 -0
  9. package/dist/server/agents/agent-slack.service.d.ts.map +1 -1
  10. package/dist/server/agents/agent-slack.service.js +43 -6
  11. package/dist/server/agents/default-skills.d.ts +9 -0
  12. package/dist/server/agents/default-skills.d.ts.map +1 -0
  13. package/dist/server/agents/default-skills.js +52 -0
  14. package/dist/server/cli/runtime-cli.d.ts +7 -1
  15. package/dist/server/cli/runtime-cli.d.ts.map +1 -1
  16. package/dist/server/cli/runtime-cli.js +107 -3
  17. package/dist/server/cli/services-cli.d.ts.map +1 -1
  18. package/dist/server/cli/services-cli.js +39 -0
  19. package/dist/server/inbox/slack-subscriber.d.ts +2 -0
  20. package/dist/server/inbox/slack-subscriber.d.ts.map +1 -1
  21. package/dist/server/inbox/slack-subscriber.js +28 -2
  22. package/dist/server/inbox/slack-subscription.service.d.ts.map +1 -1
  23. package/dist/server/inbox/slack-subscription.service.js +13 -1
  24. package/dist/server/inbox/wake-queue.service.d.ts +3 -1
  25. package/dist/server/inbox/wake-queue.service.d.ts.map +1 -1
  26. package/dist/server/inbox/wake-queue.service.js +5 -3
  27. package/dist/server/provider-usage/http.d.ts +1 -0
  28. package/dist/server/provider-usage/http.d.ts.map +1 -1
  29. package/dist/server/provider-usage/http.js +23 -1
  30. package/dist/server/provider-usage/provider-usage.service.d.ts +1 -4
  31. package/dist/server/provider-usage/provider-usage.service.d.ts.map +1 -1
  32. package/dist/server/provider-usage/provider-usage.service.js +1 -18
  33. package/dist/server/provider-usage/providers/claude.d.ts +1 -1
  34. package/dist/server/provider-usage/providers/claude.d.ts.map +1 -1
  35. package/dist/server/provider-usage/providers/claude.js +1 -1
  36. package/dist/server/provider-usage/providers/codex.d.ts +1 -1
  37. package/dist/server/provider-usage/providers/codex.d.ts.map +1 -1
  38. package/dist/server/provider-usage/providers/codex.js +1 -1
  39. package/dist/server/provider-usage/providers/kimi.d.ts +1 -1
  40. package/dist/server/provider-usage/providers/kimi.d.ts.map +1 -1
  41. package/dist/server/provider-usage/providers/kimi.js +4 -4
  42. package/dist/server/provider-usage/result.d.ts +5 -0
  43. package/dist/server/provider-usage/result.d.ts.map +1 -0
  44. package/dist/server/provider-usage/result.js +18 -0
  45. package/dist/server/providers/active-runtime.d.ts +1 -1
  46. package/dist/server/providers/active-runtime.d.ts.map +1 -1
  47. package/dist/server/providers/claude-events.d.ts +1 -1
  48. package/dist/server/providers/claude-events.d.ts.map +1 -1
  49. package/dist/server/providers/claude-events.js +2 -2
  50. package/dist/server/providers/claude.d.ts +1 -1
  51. package/dist/server/providers/claude.d.ts.map +1 -1
  52. package/dist/server/providers/claude.js +2 -2
  53. package/dist/server/providers/codex-app-server.d.ts +1 -1
  54. package/dist/server/providers/codex-app-server.d.ts.map +1 -1
  55. package/dist/server/providers/codex-app-server.js +1 -1
  56. package/dist/server/providers/codex-events.js +1 -1
  57. package/dist/server/providers/codex.d.ts +1 -1
  58. package/dist/server/providers/codex.d.ts.map +1 -1
  59. package/dist/server/providers/codex.js +2 -2
  60. package/dist/server/{runtime/provider-contract.d.ts → providers/contract.d.ts} +1 -1
  61. package/dist/server/providers/contract.d.ts.map +1 -0
  62. package/dist/server/providers/factory.d.ts +1 -1
  63. package/dist/server/providers/factory.d.ts.map +1 -1
  64. package/dist/server/providers/kimi-events.d.ts +1 -1
  65. package/dist/server/providers/kimi-events.d.ts.map +1 -1
  66. package/dist/server/providers/kimi-events.js +1 -1
  67. package/dist/server/providers/kimi.d.ts +1 -1
  68. package/dist/server/providers/kimi.d.ts.map +1 -1
  69. package/dist/server/providers/kimi.js +3 -2
  70. package/dist/server/providers/reasoning-events.js +1 -1
  71. package/dist/server/runtime/active-run-control.d.ts +19 -0
  72. package/dist/server/runtime/active-run-control.d.ts.map +1 -0
  73. package/dist/server/runtime/active-run-control.js +89 -0
  74. package/dist/server/runtime/activity.js +1 -1
  75. package/dist/server/runtime/agent-runner.d.ts +1 -1
  76. package/dist/server/runtime/agent-runner.d.ts.map +1 -1
  77. package/dist/server/runtime/delivery-prompt.d.ts +6 -0
  78. package/dist/server/runtime/delivery-prompt.d.ts.map +1 -1
  79. package/dist/server/runtime/delivery-prompt.js +53 -34
  80. package/dist/server/runtime/followup-appender.d.ts +20 -0
  81. package/dist/server/runtime/followup-appender.d.ts.map +1 -0
  82. package/dist/server/runtime/followup-appender.js +128 -0
  83. package/dist/server/runtime/host.d.ts +2 -0
  84. package/dist/server/runtime/host.d.ts.map +1 -1
  85. package/dist/server/runtime/host.js +8 -0
  86. package/dist/server/runtime/provider-runner.d.ts +16 -0
  87. package/dist/server/runtime/provider-runner.d.ts.map +1 -0
  88. package/dist/server/runtime/provider-runner.js +86 -0
  89. package/dist/server/runtime/runtime-bridge.d.ts +1 -1
  90. package/dist/server/runtime/runtime-bridge.d.ts.map +1 -1
  91. package/dist/server/runtime/runtime-session.service.d.ts +1 -1
  92. package/dist/server/runtime/runtime-session.service.d.ts.map +1 -1
  93. package/dist/server/runtime/runtime-session.service.js +1 -1
  94. package/dist/server/runtime/runtime-worker.d.ts +2 -10
  95. package/dist/server/runtime/runtime-worker.d.ts.map +1 -1
  96. package/dist/server/runtime/runtime-worker.js +60 -286
  97. package/dist/server/runtime-management/managed-runtime.d.ts.map +1 -0
  98. package/dist/server/runtime-management/runtime-release.d.ts.map +1 -0
  99. package/dist/server/{runtime → runtime-management}/runtime-upgrade.d.ts +1 -0
  100. package/dist/server/runtime-management/runtime-upgrade.d.ts.map +1 -0
  101. package/dist/server/{runtime → runtime-management}/runtime-upgrade.js +14 -0
  102. package/dist/server/services/system.service.d.ts +41 -0
  103. package/dist/server/services/system.service.d.ts.map +1 -0
  104. package/dist/server/services/system.service.js +154 -0
  105. package/dist/server/settings/settings.service.d.ts +2 -1
  106. package/dist/server/settings/settings.service.d.ts.map +1 -1
  107. package/dist/server/settings/settings.service.js +9 -1
  108. package/dist/server/slack/shortcuts.d.ts +0 -3
  109. package/dist/server/slack/shortcuts.d.ts.map +1 -1
  110. package/dist/server/slack/shortcuts.js +0 -3
  111. package/dist/server/slack-interactions/shortcut-ids.d.ts +4 -0
  112. package/dist/server/slack-interactions/shortcut-ids.d.ts.map +1 -0
  113. package/dist/server/slack-interactions/shortcut-ids.js +3 -0
  114. package/dist/server/slack-interactions/shortcut-views.d.ts +65 -0
  115. package/dist/server/slack-interactions/shortcut-views.d.ts.map +1 -0
  116. package/dist/server/slack-interactions/shortcut-views.js +211 -0
  117. package/dist/server/{slack → slack-interactions}/shortcut.service.d.ts +2 -47
  118. package/dist/server/slack-interactions/shortcut.service.d.ts.map +1 -0
  119. package/dist/server/slack-interactions/shortcut.service.js +227 -0
  120. package/dist/server/storage/jsonl-log.d.ts +9 -0
  121. package/dist/server/storage/jsonl-log.d.ts.map +1 -1
  122. package/dist/server/storage/jsonl-log.js +36 -1
  123. package/dist/server/storage/schema/server.store.d.ts +5 -0
  124. package/dist/server/storage/schema/server.store.d.ts.map +1 -1
  125. package/dist/server/storage/schema/server.store.js +2 -1
  126. package/dist/server/storage/schema/wake-queue.store.d.ts +15 -1
  127. package/dist/server/storage/schema/wake-queue.store.d.ts.map +1 -1
  128. package/dist/server/storage/schema/wake-queue.store.js +5 -3
  129. package/dist/server/tests/agent-config.test.d.ts +2 -0
  130. package/dist/server/tests/agent-config.test.d.ts.map +1 -0
  131. package/dist/server/tests/agent-config.test.js +229 -0
  132. package/dist/server/tests/agent-runtime.test.d.ts +2 -0
  133. package/dist/server/tests/agent-runtime.test.d.ts.map +1 -0
  134. package/dist/server/tests/agent-runtime.test.js +1110 -0
  135. package/dist/server/tests/agent-seed-memory.test.d.ts +2 -0
  136. package/dist/server/tests/agent-seed-memory.test.d.ts.map +1 -0
  137. package/dist/server/tests/agent-seed-memory.test.js +16 -0
  138. package/dist/server/tests/agent-skills.test.d.ts +2 -0
  139. package/dist/server/tests/agent-skills.test.d.ts.map +1 -0
  140. package/dist/server/tests/agent-skills.test.js +140 -0
  141. package/dist/server/tests/anima-home.d.ts +2 -0
  142. package/dist/server/tests/anima-home.d.ts.map +1 -0
  143. package/dist/server/tests/anima-home.js +4 -0
  144. package/dist/server/tests/cli-file.test.d.ts +2 -0
  145. package/dist/server/tests/cli-file.test.d.ts.map +1 -0
  146. package/dist/server/tests/cli-file.test.js +596 -0
  147. package/dist/server/tests/cli-message.test.d.ts +2 -0
  148. package/dist/server/tests/cli-message.test.d.ts.map +1 -0
  149. package/dist/server/tests/cli-message.test.js +1196 -0
  150. package/dist/server/tests/client-error-routes.test.d.ts +2 -0
  151. package/dist/server/tests/client-error-routes.test.d.ts.map +1 -0
  152. package/dist/server/tests/client-error-routes.test.js +163 -0
  153. package/dist/server/tests/config.test.d.ts +2 -0
  154. package/dist/server/tests/config.test.d.ts.map +1 -0
  155. package/dist/server/tests/config.test.js +497 -0
  156. package/dist/server/tests/default-skills.test.d.ts +2 -0
  157. package/dist/server/tests/default-skills.test.d.ts.map +1 -0
  158. package/dist/server/tests/default-skills.test.js +57 -0
  159. package/dist/server/tests/helpers/inbox.d.ts +10 -0
  160. package/dist/server/tests/helpers/inbox.d.ts.map +1 -0
  161. package/dist/server/tests/helpers/inbox.js +21 -0
  162. package/dist/server/tests/helpers/slack.d.ts +11 -0
  163. package/dist/server/tests/helpers/slack.d.ts.map +1 -0
  164. package/dist/server/tests/helpers/slack.js +17 -0
  165. package/dist/server/tests/helpers/state.d.ts +19 -0
  166. package/dist/server/tests/helpers/state.d.ts.map +1 -0
  167. package/dist/server/tests/helpers/state.js +69 -0
  168. package/dist/server/tests/inbox-slack-events.test.d.ts +2 -0
  169. package/dist/server/tests/inbox-slack-events.test.d.ts.map +1 -0
  170. package/dist/server/tests/inbox-slack-events.test.js +271 -0
  171. package/dist/server/tests/inbox.test.d.ts +2 -0
  172. package/dist/server/tests/inbox.test.d.ts.map +1 -0
  173. package/dist/server/tests/inbox.test.js +144 -0
  174. package/dist/server/tests/interactive-ask.test.d.ts +2 -0
  175. package/dist/server/tests/interactive-ask.test.d.ts.map +1 -0
  176. package/dist/server/tests/interactive-ask.test.js +387 -0
  177. package/dist/server/tests/kb.test.d.ts +2 -0
  178. package/dist/server/tests/kb.test.d.ts.map +1 -0
  179. package/dist/server/tests/kb.test.js +371 -0
  180. package/dist/server/tests/message.service.test.d.ts +2 -0
  181. package/dist/server/tests/message.service.test.d.ts.map +1 -0
  182. package/dist/server/tests/message.service.test.js +151 -0
  183. package/dist/server/tests/messages.test.d.ts +2 -0
  184. package/dist/server/tests/messages.test.d.ts.map +1 -0
  185. package/dist/server/tests/messages.test.js +12 -0
  186. package/dist/server/tests/prompt-attachments.test.d.ts +2 -0
  187. package/dist/server/tests/prompt-attachments.test.d.ts.map +1 -0
  188. package/dist/server/tests/prompt-attachments.test.js +274 -0
  189. package/dist/server/tests/provider-usage.test.d.ts +2 -0
  190. package/dist/server/tests/provider-usage.test.d.ts.map +1 -0
  191. package/dist/server/tests/provider-usage.test.js +97 -0
  192. package/dist/server/tests/reminders.test.d.ts +2 -0
  193. package/dist/server/tests/reminders.test.d.ts.map +1 -0
  194. package/dist/server/tests/reminders.test.js +383 -0
  195. package/dist/server/tests/runtime-cli.test.d.ts +2 -0
  196. package/dist/server/tests/runtime-cli.test.d.ts.map +1 -0
  197. package/dist/server/tests/runtime-cli.test.js +21 -0
  198. package/dist/server/tests/runtime-upgrade.test.d.ts +2 -0
  199. package/dist/server/tests/runtime-upgrade.test.d.ts.map +1 -0
  200. package/dist/server/tests/runtime-upgrade.test.js +307 -0
  201. package/dist/server/tests/runtime-worker.test.d.ts +2 -0
  202. package/dist/server/tests/runtime-worker.test.d.ts.map +1 -0
  203. package/dist/server/tests/runtime-worker.test.js +1021 -0
  204. package/dist/server/tests/runtime.test.d.ts +2 -0
  205. package/dist/server/tests/runtime.test.d.ts.map +1 -0
  206. package/dist/server/tests/runtime.test.js +354 -0
  207. package/dist/server/tests/services.test.d.ts +2 -0
  208. package/dist/server/tests/services.test.d.ts.map +1 -0
  209. package/dist/server/tests/services.test.js +636 -0
  210. package/dist/server/tests/slack-files.test.d.ts +2 -0
  211. package/dist/server/tests/slack-files.test.d.ts.map +1 -0
  212. package/dist/server/tests/slack-files.test.js +118 -0
  213. package/dist/server/tests/slack-shortcuts.test.d.ts +2 -0
  214. package/dist/server/tests/slack-shortcuts.test.d.ts.map +1 -0
  215. package/dist/server/tests/slack-shortcuts.test.js +310 -0
  216. package/dist/server/tests/slack.test.d.ts +2 -0
  217. package/dist/server/tests/slack.test.d.ts.map +1 -0
  218. package/dist/server/tests/slack.test.js +213 -0
  219. package/dist/server/tests/state-cache.test.d.ts +2 -0
  220. package/dist/server/tests/state-cache.test.d.ts.map +1 -0
  221. package/dist/server/tests/state-cache.test.js +184 -0
  222. package/dist/server/tests/subscriptions.test.d.ts +2 -0
  223. package/dist/server/tests/subscriptions.test.d.ts.map +1 -0
  224. package/dist/server/tests/subscriptions.test.js +292 -0
  225. package/dist/server/tests/system-service.test.d.ts +2 -0
  226. package/dist/server/tests/system-service.test.d.ts.map +1 -0
  227. package/dist/server/tests/system-service.test.js +20 -0
  228. package/dist/server/tests/url-routes.test.d.ts +2 -0
  229. package/dist/server/tests/url-routes.test.d.ts.map +1 -0
  230. package/dist/server/tests/url-routes.test.js +217 -0
  231. package/dist/server/tests/web-api.test.d.ts +2 -0
  232. package/dist/server/tests/web-api.test.d.ts.map +1 -0
  233. package/dist/server/tests/web-api.test.js +1759 -0
  234. package/dist/server/web/app.d.ts.map +1 -1
  235. package/dist/server/web/app.js +2 -0
  236. package/dist/server/web/client-error-routes.d.ts +3 -0
  237. package/dist/server/web/client-error-routes.d.ts.map +1 -0
  238. package/dist/server/web/client-error-routes.js +101 -0
  239. package/dist/server/web/system-routes.d.ts.map +1 -1
  240. package/dist/server/web/system-routes.js +21 -131
  241. package/dist/shared/agent-config.d.ts +8 -18
  242. package/dist/shared/agent-config.d.ts.map +1 -1
  243. package/dist/shared/agent-config.js +3 -4
  244. package/dist/shared/inbox.d.ts +27 -0
  245. package/dist/shared/inbox.d.ts.map +1 -1
  246. package/dist/shared/inbox.js +1 -0
  247. package/dist/shared/server-info.d.ts +6 -5
  248. package/dist/shared/server-info.d.ts.map +1 -1
  249. package/dist/shared/server-info.js +3 -1
  250. package/dist/shared/server-settings.d.ts +6 -0
  251. package/dist/shared/server-settings.d.ts.map +1 -1
  252. package/dist/shared/server-settings.js +1 -0
  253. package/dist/shared/skills.d.ts +24 -3
  254. package/dist/shared/skills.d.ts.map +1 -1
  255. package/dist/web/assets/activity-DHjip8tY.js +7 -0
  256. package/dist/web/assets/clipboard-D2NSC52v.js +1 -0
  257. package/dist/web/assets/{external-link-Dt0qTpmV.js → external-link-Bhr1WdRS.js} +1 -1
  258. package/dist/web/assets/{file-text-Dd9ys6py.js → file-text-CYMA_SMA.js} +1 -1
  259. package/dist/web/assets/{index-CzAQnbuO.js → index-CVpew409.js} +5 -5
  260. package/dist/web/assets/index-mh0uJTkY.css +2 -0
  261. package/dist/web/assets/kb-DDVpYkT9.js +35 -0
  262. package/dist/web/assets/profile-CBy6GNzp.js +1 -0
  263. package/dist/web/assets/reminders-Bbwb9QNT.js +1 -0
  264. package/dist/web/favicon.svg +1 -1
  265. package/dist/web/index.html +2 -2
  266. package/package.json +1 -1
  267. package/templates/runtime-standing-prompt.md +16 -2
  268. package/templates/skills/find-skills/SKILL.md +133 -0
  269. package/dist/server/runtime/activity-payload.d.ts.map +0 -1
  270. package/dist/server/runtime/activity-text.d.ts +0 -4
  271. package/dist/server/runtime/activity-text.d.ts.map +0 -1
  272. package/dist/server/runtime/activity-text.js +0 -16
  273. package/dist/server/runtime/managed-runtime.d.ts.map +0 -1
  274. package/dist/server/runtime/provider-contract.d.ts.map +0 -1
  275. package/dist/server/runtime/runtime-release.d.ts.map +0 -1
  276. package/dist/server/runtime/runtime-upgrade.d.ts.map +0 -1
  277. package/dist/server/slack/shortcut.service.d.ts.map +0 -1
  278. package/dist/server/slack/shortcut.service.js +0 -493
  279. package/dist/web/assets/activity-BP0C81IV.js +0 -7
  280. package/dist/web/assets/globe-DmDZSgDP.js +0 -1
  281. package/dist/web/assets/index-DKecrvN0.css +0 -2
  282. package/dist/web/assets/kb-3wFeP2Jt.js +0 -32
  283. package/dist/web/assets/profile-D7wPZXW_.js +0 -1
  284. package/dist/web/assets/reminders-DOhroVwo.js +0 -1
  285. /package/dist/server/{runtime/provider-contract.js → providers/contract.js} +0 -0
  286. /package/dist/server/{runtime → runtime-management}/managed-runtime.d.ts +0 -0
  287. /package/dist/server/{runtime → runtime-management}/managed-runtime.js +0 -0
  288. /package/dist/server/{runtime → runtime-management}/runtime-release.d.ts +0 -0
  289. /package/dist/server/{runtime → runtime-management}/runtime-release.js +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../server/web/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAWxC,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAWvD"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../../server/web/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAYxC,wBAAsB,eAAe,IAAI,OAAO,CAAC,MAAM,CAAC,CAYvD"}
@@ -1,5 +1,6 @@
1
1
  import Fastify from 'fastify';
2
2
  import { registerAgentRoutes } from './agent-routes.js';
3
+ import { registerClientErrorRoutes } from './client-error-routes.js';
3
4
  import { registerErrorHandler } from './http.js';
4
5
  import { registerStaticRoutes } from './static.js';
5
6
  import { registerSystemRoutes } from './system-routes.js';
@@ -8,6 +9,7 @@ export async function createWebServer() {
8
9
  const fastify = Fastify({ logger: false });
9
10
  registerErrorHandler(fastify);
10
11
  registerSystemRoutes(fastify);
12
+ registerClientErrorRoutes(fastify);
11
13
  registerKbRoutes(fastify);
12
14
  registerAgentRoutes(fastify);
13
15
  registerStaticRoutes(fastify);
@@ -0,0 +1,3 @@
1
+ import type { FastifyInstance } from 'fastify';
2
+ export declare function registerClientErrorRoutes(fastify: FastifyInstance): void;
3
+ //# sourceMappingURL=client-error-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client-error-routes.d.ts","sourceRoot":"","sources":["../../../server/web/client-error-routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA8F/C,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAqCxE"}
@@ -0,0 +1,101 @@
1
+ import { join } from 'node:path';
2
+ import { z } from 'zod';
3
+ import { resolveAnimaHome } from '../anima-home.js';
4
+ import { DEFAULT_JSONL_ROTATE_BYTES, JsonlAppendLog } from '../storage/jsonl-log.js';
5
+ // Local-only client-error diagnostics.
6
+ //
7
+ // The dashboard front-end posts uncaught errors here so they land in the
8
+ // operator's OWN local logs — this is NOT telemetry: nothing is sent to us or
9
+ // any third party, and there is no outbound path. The data stays in the user's
10
+ // own runtime/infrastructure (note: over a LAN dashboard the browser and the
11
+ // host can be different machines, so it is not "never leaves this computer" —
12
+ // it never leaves the user's infrastructure and never reaches us).
13
+ //
14
+ // Kept separate from activity.jsonl: activity is the agent work/audit trail;
15
+ // UI crashes are operator diagnostics, not agent actions.
16
+ // Generous upper bounds — reject absurd/abusive payloads at the schema layer.
17
+ // Display/storage caps are applied separately via truncate() below.
18
+ const ClientErrorPayload = z.object({
19
+ kind: z.enum(['error', 'unhandledrejection', 'render']),
20
+ message: z.string().max(20_000),
21
+ stack: z.string().max(100_000).optional(),
22
+ componentStack: z.string().max(100_000).optional(),
23
+ // pathname only — the client strips origin/query/hash, but defend in depth here too.
24
+ path: z.string().max(4_096),
25
+ userAgent: z.string().max(4_096),
26
+ createdAt: z.string().max(64),
27
+ });
28
+ // Storage caps — bound what actually hits disk regardless of the schema ceiling.
29
+ const MAX_MESSAGE = 2_000;
30
+ const MAX_STACK = 8_000;
31
+ const MAX_PATH = 1_024;
32
+ const MAX_USER_AGENT = 512;
33
+ const MAX_CREATED_AT = 64;
34
+ // Reject oversized request bodies before parsing (~32KB is ample for a stack).
35
+ const BODY_LIMIT_BYTES = 32 * 1024;
36
+ // Retention cap: at most this many rotated 10MB segments are kept on disk, so
37
+ // the local diagnostics log can never grow without bound (~1GB worst case).
38
+ const MAX_ARCHIVES = 100;
39
+ function truncate(value, max) {
40
+ return value.length > max ? `${value.slice(0, max)}…[truncated]` : value;
41
+ }
42
+ // Defence in depth: store the pathname ONLY. The client sends location.pathname,
43
+ // but a buggy/test/malicious caller could send a full URL — parsing against a
44
+ // dummy base reduces any absolute URL to its pathname, dropping origin, userinfo
45
+ // (`https://token@host/...`), query, and hash, all of which can carry secrets.
46
+ function sanitizePath(path) {
47
+ let pathname;
48
+ try {
49
+ pathname = new URL(path, 'http://local').pathname;
50
+ }
51
+ catch {
52
+ // new URL with an absolute base shouldn't throw for a string, but never
53
+ // trust input: fall back to a query/hash-stripped relative path, else '/'.
54
+ pathname = path.startsWith('/') ? (path.split(/[?#]/, 1)[0] ?? '/') : '/';
55
+ }
56
+ return truncate(pathname, MAX_PATH);
57
+ }
58
+ let cachedLog;
59
+ // Resolved lazily so the ANIMA_HOME scope in effect at request time is honoured.
60
+ function clientErrorLog() {
61
+ const path = join(resolveAnimaHome(), 'logs', 'client-errors.jsonl');
62
+ if (!cachedLog || cachedLog.path !== path) {
63
+ cachedLog = new JsonlAppendLog(path, {
64
+ maxBytes: DEFAULT_JSONL_ROTATE_BYTES,
65
+ // Hard disk ceiling: keep at most 100 rotated 10MB segments (~1GB worst
66
+ // case). A runaway render loop can't fill the disk via diagnostics.
67
+ maxArchives: MAX_ARCHIVES,
68
+ });
69
+ }
70
+ return cachedLog;
71
+ }
72
+ export function registerClientErrorRoutes(fastify) {
73
+ fastify.post('/api/client-errors', { bodyLimit: BODY_LIMIT_BYTES }, async (request, reply) => {
74
+ const parsed = ClientErrorPayload.safeParse(request.body);
75
+ if (!parsed.success) {
76
+ return reply.status(400).send({ error: 'Invalid client error payload' });
77
+ }
78
+ const payload = parsed.data;
79
+ const record = {
80
+ kind: payload.kind,
81
+ message: truncate(payload.message, MAX_MESSAGE),
82
+ ...(payload.stack ? { stack: truncate(payload.stack, MAX_STACK) } : {}),
83
+ ...(payload.componentStack
84
+ ? { componentStack: truncate(payload.componentStack, MAX_STACK) }
85
+ : {}),
86
+ path: sanitizePath(payload.path),
87
+ userAgent: truncate(payload.userAgent, MAX_USER_AGENT),
88
+ createdAt: truncate(payload.createdAt, MAX_CREATED_AT),
89
+ receivedAt: new Date().toISOString(),
90
+ };
91
+ try {
92
+ await clientErrorLog().append(record);
93
+ }
94
+ catch (error) {
95
+ // Diagnostics must never become a source of 5xx noise of their own.
96
+ request.log?.error?.(`Failed to append client error log: ${error instanceof Error ? error.message : String(error)}`);
97
+ }
98
+ // Fire-and-forget contract: never echo the payload back.
99
+ return reply.status(204).send();
100
+ });
101
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"system-routes.d.ts","sourceRoot":"","sources":["../../../server/web/system-routes.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AA6B/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CAwCnE"}
1
+ {"version":3,"file":"system-routes.d.ts","sourceRoot":"","sources":["../../../server/web/system-routes.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAgB/C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI,CA+CnE"}
@@ -1,31 +1,20 @@
1
- import { execFile, spawn } from 'node:child_process';
2
- import { existsSync } from 'node:fs';
3
- import { mkdir, open, readFile, rm } from 'node:fs/promises';
4
- import { homedir } from 'node:os';
5
1
  import { dirname, join, resolve } from 'node:path';
6
2
  import { fileURLToPath } from 'node:url';
7
- import { promisify } from 'node:util';
8
- import { resolveAnimaHome } from '../anima-home.js';
9
3
  import { defaultServerSettingsService } from '../settings/settings.service.js';
10
- import { cleanServiceEnv } from '../services/env.js';
11
- import { readLastServicesRestart, servicesRestartLogPath, servicesRestartResultPath, } from '../services/restart-result.js';
4
+ import { defaultSystemService, SystemServiceError } from '../services/system.service.js';
12
5
  import { defaultProviderUsageService } from '../provider-usage/provider-usage.service.js';
13
- import { defaultRuntimeUpgradeService, RuntimeUpgradeConflictError, RuntimeUpgradeUnavailableError, } from '../runtime/runtime-upgrade.js';
6
+ import { defaultRuntimeUpgradeService, RuntimeUpgradeConflictError, RuntimeUpgradeUnavailableError, } from '../runtime-management/runtime-upgrade.js';
14
7
  import { SidebarOrder } from '../../shared/server-settings.js';
15
- import { PROVIDER_CATALOG } from '../../shared/provider-catalog.js';
16
8
  import { HttpError } from './http.js';
17
- const execFileAsync = promisify(execFile);
18
9
  const PROJECT_ROOT = resolve(dirname(fileURLToPath(import.meta.url)), '../../..');
19
10
  const ANIMACTL_SCRIPT = join(PROJECT_ROOT, 'dist/server/cli/animactl.js');
20
- const API_SERVER_STARTED_AT = new Date().toISOString();
21
- const API_SERVER_COMMIT = gitShortCommit();
22
- const RESTART_AFTER_RESPONSE_DELAY_MS = 250;
23
11
  export function registerSystemRoutes(fastify) {
24
12
  fastify.get('/api/health', async () => ({ ok: true }));
25
- fastify.get('/api/provider-availability', async () => detectProviderAvailability());
13
+ fastify.get('/api/provider-availability', async () => defaultSystemService.providerAvailability());
26
14
  fastify.get('/api/provider-usage', async () => defaultProviderUsageService.list());
27
15
  fastify.get('/api/system-update', async () => defaultRuntimeUpgradeService.status());
28
- fastify.get('/api/server-info', async () => serverInfoForUi());
16
+ fastify.post('/api/system-update/check', async () => defaultRuntimeUpgradeService.checkNow());
17
+ fastify.get('/api/server-info', async () => defaultSystemService.serverInfo());
29
18
  fastify.post('/api/system-update/apply', async (_request, reply) => {
30
19
  try {
31
20
  const config = await defaultServerSettingsService.readConfig();
@@ -33,9 +22,9 @@ export function registerSystemRoutes(fastify) {
33
22
  animactlScript: ANIMACTL_SCRIPT,
34
23
  dashboardHost: config.dashboardHost ?? '127.0.0.1',
35
24
  dashboardPort: config.dashboardPort ?? 4174,
36
- previousStartedAt: API_SERVER_STARTED_AT,
25
+ previousStartedAt: defaultSystemService.serverStartedAt(),
37
26
  });
38
- queueRuntimeUpgrade(reply.raw, prepared.response, prepared.spawn);
27
+ queueAfterResponse(reply.raw, prepared.response.delayMs, prepared.spawn, 'Failed to queue runtime upgrade');
39
28
  return reply.status(202).send(prepared.response);
40
29
  }
41
30
  catch (error) {
@@ -47,8 +36,16 @@ export function registerSystemRoutes(fastify) {
47
36
  }
48
37
  });
49
38
  fastify.post('/api/services/restart', async (_request, reply) => {
50
- const queued = queueServicesRestart(reply.raw);
51
- return reply.status(202).send(queued);
39
+ try {
40
+ const prepared = defaultSystemService.prepareServicesRestart();
41
+ queueAfterResponse(reply.raw, prepared.response.delayMs, prepared.spawn, 'Failed to queue services restart');
42
+ return reply.status(202).send(prepared.response);
43
+ }
44
+ catch (error) {
45
+ if (error instanceof SystemServiceError)
46
+ throw new HttpError(500, error.message);
47
+ throw error;
48
+ }
52
49
  });
53
50
  // Sidebar order — global, persisted in ANIMA_HOME/config.json.
54
51
  fastify.get('/api/sidebar-order', async () => {
@@ -62,120 +59,13 @@ export function registerSystemRoutes(fastify) {
62
59
  return { sidebarOrder: await defaultServerSettingsService.setSidebarOrder(parsed.data) };
63
60
  });
64
61
  }
65
- function queueRuntimeUpgrade(response, queued, spawnWorker) {
66
- response.once('finish', () => {
67
- const timer = setTimeout(() => {
68
- void spawnWorker().catch((error) => {
69
- console.error(`Failed to queue runtime upgrade: ${error instanceof Error ? error.message : String(error)}`);
70
- });
71
- }, queued.delayMs);
72
- timer.unref();
73
- });
74
- }
75
- function queueServicesRestart(response) {
76
- if (!existsSync(ANIMACTL_SCRIPT)) {
77
- throw new HttpError(500, `animactl not found: ${ANIMACTL_SCRIPT}`);
78
- }
79
- const animaHome = resolveAnimaHome();
80
- const logPath = servicesRestartLogPath(animaHome);
81
- const resultPath = servicesRestartResultPath(animaHome);
62
+ function queueAfterResponse(response, delayMs, task, errorPrefix) {
82
63
  response.once('finish', () => {
83
64
  const timer = setTimeout(() => {
84
- void restartServicesDetached(animaHome, logPath, resultPath).catch((error) => {
85
- console.error(`Failed to queue services restart: ${error instanceof Error ? error.message : String(error)}`);
65
+ void task().catch((error) => {
66
+ console.error(`${errorPrefix}: ${error instanceof Error ? error.message : String(error)}`);
86
67
  });
87
- }, RESTART_AFTER_RESPONSE_DELAY_MS);
68
+ }, delayMs);
88
69
  timer.unref();
89
70
  });
90
- return {
91
- ok: true,
92
- animaHome,
93
- delayMs: RESTART_AFTER_RESPONSE_DELAY_MS,
94
- logPath,
95
- scheduled: true,
96
- };
97
- }
98
- async function restartServicesDetached(animaHome, logPath, resultPath) {
99
- let log;
100
- try {
101
- await mkdir(dirname(logPath), { recursive: true });
102
- await rm(resultPath, { force: true });
103
- log = await open(logPath, 'a');
104
- await log.write(`\n[${new Date().toISOString()}] web app requested services restart\n`);
105
- }
106
- catch (error) {
107
- console.error(`Failed to open restart log ${logPath}: ${error instanceof Error ? error.message : String(error)}`);
108
- }
109
- const child = spawn(process.execPath, [ANIMACTL_SCRIPT, 'services', 'restart', '--drain-active', '--resume-running'], {
110
- cwd: PROJECT_ROOT,
111
- detached: true,
112
- env: { ...cleanServiceEnv(), ANIMA_HOME: animaHome, ANIMA_RESTART_RESULT_FILE: resultPath },
113
- stdio: log ? ['ignore', log.fd, log.fd] : 'ignore',
114
- });
115
- child.on('error', (error) => {
116
- console.error(`Failed to start services restart: ${error.message}`);
117
- });
118
- child.unref();
119
- await log?.close();
120
- }
121
- async function serverInfoForUi() {
122
- const animaHome = resolveAnimaHome();
123
- const [config, version, commit, lastRestart] = await Promise.all([
124
- defaultServerSettingsService.readConfig(),
125
- packageVersion(),
126
- API_SERVER_COMMIT,
127
- readLastServicesRestart(animaHome),
128
- ]);
129
- return {
130
- animaHome,
131
- ...(commit ? { commit } : {}),
132
- dashboardPort: config.dashboardPort ?? 4174,
133
- env: environmentName(animaHome),
134
- ...(lastRestart ? { lastRestart } : {}),
135
- ok: true,
136
- startedAt: API_SERVER_STARTED_AT,
137
- uptimeSeconds: Math.max(0, Math.floor((Date.now() - Date.parse(API_SERVER_STARTED_AT)) / 1000)),
138
- version,
139
- };
140
- }
141
- async function packageVersion() {
142
- try {
143
- const pkg = JSON.parse(await readFile(join(PROJECT_ROOT, 'package.json'), 'utf8'));
144
- return typeof pkg.version === 'string' && pkg.version ? pkg.version : 'unknown';
145
- }
146
- catch {
147
- return 'unknown';
148
- }
149
- }
150
- async function gitShortCommit() {
151
- try {
152
- const { stdout } = await execFileAsync('git', ['rev-parse', '--short', 'HEAD'], { cwd: PROJECT_ROOT });
153
- return stdout.trim() || undefined;
154
- }
155
- catch {
156
- return undefined;
157
- }
158
- }
159
- function environmentName(animaHome) {
160
- if (resolve(animaHome) === resolve(PROJECT_ROOT, '.anima'))
161
- return 'dev';
162
- if (resolve(animaHome) === resolve(homedir(), '.anima'))
163
- return 'dogfood';
164
- return 'custom';
165
- }
166
- async function detectProviderAvailability() {
167
- return {
168
- providers: await Promise.all(PROVIDER_CATALOG.map(async (entry) => ({
169
- kind: entry.kind,
170
- present: await commandPresent(entry.command),
171
- }))),
172
- };
173
- }
174
- function commandPresent(command) {
175
- return new Promise((resolvePresent) => {
176
- const child = execFile(command, ['--version'], { encoding: 'utf8', timeout: 2_000 }, (error) => {
177
- resolvePresent(!error);
178
- });
179
- child.stdin?.end();
180
- });
181
71
  }
@@ -76,14 +76,6 @@ export declare const AgentSetOwnerRequest: z.ZodObject<{
76
76
  introduce: z.ZodOptional<z.ZodBoolean>;
77
77
  }, z.core.$strict>;
78
78
  export type AgentSetOwnerRequest = z.infer<typeof AgentSetOwnerRequest>;
79
- /** @deprecated Use AgentSetOwnerRequest */
80
- export declare const AgentSetOperatorRequest: z.ZodObject<{
81
- slackUserId: z.ZodString;
82
- openerNote: z.ZodOptional<z.ZodString>;
83
- introduce: z.ZodOptional<z.ZodBoolean>;
84
- }, z.core.$strict>;
85
- /** @deprecated Use AgentSetOwnerRequest */
86
- export type AgentSetOperatorRequest = AgentSetOwnerRequest;
87
79
  export declare const SlackUserCandidate: z.ZodObject<{
88
80
  slackUserId: z.ZodString;
89
81
  displayName: z.ZodString;
@@ -149,6 +141,7 @@ export declare const SlackConfig: z.ZodPipe<z.ZodObject<{
149
141
  appId: z.ZodOptional<z.ZodString>;
150
142
  appToken: z.ZodDefault<z.ZodString>;
151
143
  avatarUrl: z.ZodOptional<z.ZodString>;
144
+ botProfileSyncedAt: z.ZodOptional<z.ZodString>;
152
145
  botToken: z.ZodDefault<z.ZodString>;
153
146
  connected: z.ZodOptional<z.ZodBoolean>;
154
147
  manifestVersion: z.ZodDefault<z.ZodNumber>;
@@ -165,6 +158,7 @@ export declare const SlackConfig: z.ZodPipe<z.ZodObject<{
165
158
  workspaceName: string;
166
159
  appId?: string | undefined;
167
160
  avatarUrl?: string | undefined;
161
+ botProfileSyncedAt?: string | undefined;
168
162
  }, {
169
163
  appToken: string;
170
164
  botToken: string;
@@ -174,6 +168,7 @@ export declare const SlackConfig: z.ZodPipe<z.ZodObject<{
174
168
  workspaceName: string;
175
169
  appId?: string | undefined;
176
170
  avatarUrl?: string | undefined;
171
+ botProfileSyncedAt?: string | undefined;
177
172
  connected?: boolean | undefined;
178
173
  }>>;
179
174
  export type SlackConfig = z.infer<typeof SlackConfig>;
@@ -185,16 +180,6 @@ export declare const AgentOwner: z.ZodObject<{
185
180
  onboardingPromptedAt: z.ZodOptional<z.ZodString>;
186
181
  }, z.core.$strict>;
187
182
  export type AgentOwner = z.infer<typeof AgentOwner>;
188
- /** @deprecated Use AgentOwner */
189
- export declare const AgentOperator: z.ZodObject<{
190
- slackUserId: z.ZodString;
191
- displayName: z.ZodString;
192
- handle: z.ZodOptional<z.ZodString>;
193
- avatarUrl: z.ZodOptional<z.ZodString>;
194
- onboardingPromptedAt: z.ZodOptional<z.ZodString>;
195
- }, z.core.$strict>;
196
- /** @deprecated Use AgentOwner */
197
- export type AgentOperator = AgentOwner;
198
183
  export declare const AgentProfileConfig: z.ZodObject<{
199
184
  displayName: z.ZodString;
200
185
  role: z.ZodString;
@@ -243,6 +228,7 @@ export declare function agentConfigSchema(fallbackId: string): z.ZodPreprocess<z
243
228
  appId: z.ZodOptional<z.ZodString>;
244
229
  appToken: z.ZodDefault<z.ZodString>;
245
230
  avatarUrl: z.ZodOptional<z.ZodString>;
231
+ botProfileSyncedAt: z.ZodOptional<z.ZodString>;
246
232
  botToken: z.ZodDefault<z.ZodString>;
247
233
  connected: z.ZodOptional<z.ZodBoolean>;
248
234
  manifestVersion: z.ZodDefault<z.ZodNumber>;
@@ -259,6 +245,7 @@ export declare function agentConfigSchema(fallbackId: string): z.ZodPreprocess<z
259
245
  workspaceName: string;
260
246
  appId?: string | undefined;
261
247
  avatarUrl?: string | undefined;
248
+ botProfileSyncedAt?: string | undefined;
262
249
  }, {
263
250
  appToken: string;
264
251
  botToken: string;
@@ -268,6 +255,7 @@ export declare function agentConfigSchema(fallbackId: string): z.ZodPreprocess<z
268
255
  workspaceName: string;
269
256
  appId?: string | undefined;
270
257
  avatarUrl?: string | undefined;
258
+ botProfileSyncedAt?: string | undefined;
271
259
  connected?: boolean | undefined;
272
260
  }>>>;
273
261
  homePath: z.ZodOptional<z.ZodString>;
@@ -301,6 +289,7 @@ export declare function agentConfigSchema(fallbackId: string): z.ZodPreprocess<z
301
289
  workspaceName: string;
302
290
  appId?: string | undefined;
303
291
  avatarUrl?: string | undefined;
292
+ botProfileSyncedAt?: string | undefined;
304
293
  };
305
294
  homePath: string;
306
295
  owner?: {
@@ -361,6 +350,7 @@ export declare function agentConfigSchema(fallbackId: string): z.ZodPreprocess<z
361
350
  workspaceName: string;
362
351
  appId?: string | undefined;
363
352
  avatarUrl?: string | undefined;
353
+ botProfileSyncedAt?: string | undefined;
364
354
  } | undefined;
365
355
  homePath?: string | undefined;
366
356
  }>>>;
@@ -1 +1 @@
1
- {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../shared/agent-config.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAWxB,eAAO,MAAM,gCAAgC,QAAiB,CAAC;AAC/D,eAAO,MAAM,+BAA+B,gJAQlC,CAAC;AAEX,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAsCD,eAAO,MAAM,kBAAkB;;;;;;;;;kBAOpB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,sBAAsB;;kBAExB,CAAC;AAEZ,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,eAAO,MAAM,yBAAyB;;;kBAKpC,CAAC;AAEH,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,eAAO,MAAM,0BAA0B;;;;;kBAA6B,CAAC;AAErE,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEpF,eAAO,MAAM,wBAAwB;;;kBAO1B,CAAC;AAEZ,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAEhF,eAAO,MAAM,yBAAyB;;;kBAG3B,CAAC;AAEZ,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAElF,MAAM,MAAM,cAAc,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AAEvD,MAAM,MAAM,0BAA0B,GAClC,eAAe,GACf,kBAAkB,GAClB,oBAAoB,GACpB,eAAe,GACf,2BAA2B,GAC3B,eAAe,GACf,iBAAiB,CAAC;AAEtB,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,QAAQ,EAAE,OAAO,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IAC7C,MAAM,CAAC,EAAE,0BAA0B,CAAC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,yBAAyB;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,YAAY,GAAG,cAAc,CAAC;IACvC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,0BAA0B;IACzC,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,GAAG,CAAC,EAAE,oBAAoB,CAAC;IAC3B,UAAU,EAAE,yBAAyB,CAAC;CACvC;AAED,eAAO,MAAM,oBAAoB;;;;kBAItB,CAAC;AAEZ,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAExE,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB;;;;kBAAuB,CAAC;AAC5D,2CAA2C;AAC3C,MAAM,MAAM,uBAAuB,GAAG,oBAAoB,CAAC;AAE3D,eAAO,MAAM,kBAAkB;;;;;kBAKpB,CAAC;AAEZ,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,eAAO,MAAM,2BAA2B;;;;;;;;;;;;iBAOtC,CAAC;AAEH,MAAM,MAAM,2BAA2B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAEtF,eAAO,MAAM,6BAA6B;;;;;;iBAMxC,CAAC;AAEH,MAAM,MAAM,6BAA6B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,6BAA6B,CAAC,CAAC;AAE1F,eAAO,MAAM,0BAA0B;;;;;iBAKrC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAEpF,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;4BAiB/B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAerB,CAAC;AAEJ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,UAAU;;;;;;kBAEZ,CAAC;AAEZ,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,iCAAiC;AACjC,eAAO,MAAM,aAAa;;;;;;kBAAa,CAAC;AACxC,iCAAiC;AACjC,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC;AAevC,eAAO,MAAM,kBAAkB;;;iBAG7B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAEpE,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KA2CnD;AAED,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"agent-config.d.ts","sourceRoot":"","sources":["../../shared/agent-config.ts"],"names":[],"mappings":"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"}
@@ -87,8 +87,6 @@ export const AgentSetOwnerRequest = z.object({
87
87
  openerNote: z.string().optional(),
88
88
  introduce: z.boolean().optional(),
89
89
  }).strict();
90
- /** @deprecated Use AgentSetOwnerRequest */
91
- export const AgentSetOperatorRequest = AgentSetOwnerRequest;
92
90
  export const SlackUserCandidate = z.object({
93
91
  slackUserId: z.string(),
94
92
  displayName: z.string(),
@@ -135,6 +133,9 @@ export const SlackConfig = z.object({
135
133
  appId: z.string().optional(),
136
134
  appToken: z.string().default(''),
137
135
  avatarUrl: z.string().optional(),
136
+ // ISO timestamp of the last bot display-info (avatar/name/icon) sync, used to
137
+ // throttle the automatic refresh that runs while the agent handles messages.
138
+ botProfileSyncedAt: z.string().optional(),
138
139
  botToken: z.string().default(''),
139
140
  connected: z.boolean().optional(),
140
141
  manifestVersion: z.number().int().nonnegative().default(0),
@@ -150,8 +151,6 @@ export const SlackConfig = z.object({
150
151
  export const AgentOwner = SlackUserCandidate.extend({
151
152
  onboardingPromptedAt: z.string().optional(),
152
153
  }).strict();
153
- /** @deprecated Use AgentOwner */
154
- export const AgentOperator = AgentOwner;
155
154
  const AgentProfileInput = z.preprocess((value) => {
156
155
  if (!isRecord(value))
157
156
  return value;
@@ -13,6 +13,9 @@ export declare const InboxItemHandling: z.ZodObject<{
13
13
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
14
14
  failedAt: z.ZodOptional<z.ZodString>;
15
15
  queuedAt: z.ZodOptional<z.ZodString>;
16
+ resumeReason: z.ZodOptional<z.ZodEnum<{
17
+ runtime_restart: "runtime_restart";
18
+ }>>;
16
19
  settledAt: z.ZodOptional<z.ZodString>;
17
20
  startedAt: z.ZodOptional<z.ZodString>;
18
21
  status: z.ZodEnum<{
@@ -54,6 +57,9 @@ export declare const SlackInboxItem: z.ZodObject<{
54
57
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
55
58
  failedAt: z.ZodOptional<z.ZodString>;
56
59
  queuedAt: z.ZodOptional<z.ZodString>;
60
+ resumeReason: z.ZodOptional<z.ZodEnum<{
61
+ runtime_restart: "runtime_restart";
62
+ }>>;
57
63
  settledAt: z.ZodOptional<z.ZodString>;
58
64
  startedAt: z.ZodOptional<z.ZodString>;
59
65
  status: z.ZodEnum<{
@@ -105,6 +111,9 @@ export declare const ReminderInboxItem: z.ZodObject<{
105
111
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
106
112
  failedAt: z.ZodOptional<z.ZodString>;
107
113
  queuedAt: z.ZodOptional<z.ZodString>;
114
+ resumeReason: z.ZodOptional<z.ZodEnum<{
115
+ runtime_restart: "runtime_restart";
116
+ }>>;
108
117
  settledAt: z.ZodOptional<z.ZodString>;
109
118
  startedAt: z.ZodOptional<z.ZodString>;
110
119
  status: z.ZodEnum<{
@@ -131,6 +140,9 @@ export declare const OnboardingInboxItem: z.ZodObject<{
131
140
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
132
141
  failedAt: z.ZodOptional<z.ZodString>;
133
142
  queuedAt: z.ZodOptional<z.ZodString>;
143
+ resumeReason: z.ZodOptional<z.ZodEnum<{
144
+ runtime_restart: "runtime_restart";
145
+ }>>;
134
146
  settledAt: z.ZodOptional<z.ZodString>;
135
147
  startedAt: z.ZodOptional<z.ZodString>;
136
148
  status: z.ZodEnum<{
@@ -164,6 +176,9 @@ export declare const ChoiceResponseInboxItem: z.ZodObject<{
164
176
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
165
177
  failedAt: z.ZodOptional<z.ZodString>;
166
178
  queuedAt: z.ZodOptional<z.ZodString>;
179
+ resumeReason: z.ZodOptional<z.ZodEnum<{
180
+ runtime_restart: "runtime_restart";
181
+ }>>;
167
182
  settledAt: z.ZodOptional<z.ZodString>;
168
183
  startedAt: z.ZodOptional<z.ZodString>;
169
184
  status: z.ZodEnum<{
@@ -203,6 +218,9 @@ export declare const InboxItemSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
203
218
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
204
219
  failedAt: z.ZodOptional<z.ZodString>;
205
220
  queuedAt: z.ZodOptional<z.ZodString>;
221
+ resumeReason: z.ZodOptional<z.ZodEnum<{
222
+ runtime_restart: "runtime_restart";
223
+ }>>;
206
224
  settledAt: z.ZodOptional<z.ZodString>;
207
225
  startedAt: z.ZodOptional<z.ZodString>;
208
226
  status: z.ZodEnum<{
@@ -252,6 +270,9 @@ export declare const InboxItemSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
252
270
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
253
271
  failedAt: z.ZodOptional<z.ZodString>;
254
272
  queuedAt: z.ZodOptional<z.ZodString>;
273
+ resumeReason: z.ZodOptional<z.ZodEnum<{
274
+ runtime_restart: "runtime_restart";
275
+ }>>;
255
276
  settledAt: z.ZodOptional<z.ZodString>;
256
277
  startedAt: z.ZodOptional<z.ZodString>;
257
278
  status: z.ZodEnum<{
@@ -276,6 +297,9 @@ export declare const InboxItemSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
276
297
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
277
298
  failedAt: z.ZodOptional<z.ZodString>;
278
299
  queuedAt: z.ZodOptional<z.ZodString>;
300
+ resumeReason: z.ZodOptional<z.ZodEnum<{
301
+ runtime_restart: "runtime_restart";
302
+ }>>;
279
303
  settledAt: z.ZodOptional<z.ZodString>;
280
304
  startedAt: z.ZodOptional<z.ZodString>;
281
305
  status: z.ZodEnum<{
@@ -307,6 +331,9 @@ export declare const InboxItemSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
307
331
  drainTimeoutMs: z.ZodOptional<z.ZodNumber>;
308
332
  failedAt: z.ZodOptional<z.ZodString>;
309
333
  queuedAt: z.ZodOptional<z.ZodString>;
334
+ resumeReason: z.ZodOptional<z.ZodEnum<{
335
+ runtime_restart: "runtime_restart";
336
+ }>>;
310
337
  settledAt: z.ZodOptional<z.ZodString>;
311
338
  startedAt: z.ZodOptional<z.ZodString>;
312
339
  status: z.ZodEnum<{
@@ -1 +1 @@
1
- {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../shared/inbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;EAAuD,CAAC;AACpF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;iBAa5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe;;;;;;;;;;iBAU1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,aAAa;;;;;;iBAMxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAQ1D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;iBAG5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgBlC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAK1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
1
+ {"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../shared/inbox.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;;;;EAAuD,CAAC;AACpF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;iBAc5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,eAAe;;;;;;;;;;iBAU1B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,aAAa;;;;;;iBAMxB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAQ1D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAYzB,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAG5B,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAElE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAU9B,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAgBlC,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAE9E,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2BAK1B,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC"}
@@ -8,6 +8,7 @@ export const InboxItemHandling = z.object({
8
8
  drainTimeoutMs: z.number().int().nonnegative().optional(),
9
9
  failedAt: z.string().optional(),
10
10
  queuedAt: z.string().optional(),
11
+ resumeReason: z.enum(['runtime_restart']).optional(),
11
12
  settledAt: z.string().optional(),
12
13
  startedAt: z.string().optional(),
13
14
  status: InboxItemStatus,
@@ -123,11 +123,7 @@ export declare const ServerInfo: z.ZodObject<{
123
123
  animaHome: z.ZodString;
124
124
  commit: z.ZodOptional<z.ZodString>;
125
125
  dashboardPort: z.ZodNumber;
126
- env: z.ZodEnum<{
127
- custom: "custom";
128
- dev: "dev";
129
- dogfood: "dogfood";
130
- }>;
126
+ docsUrl: z.ZodOptional<z.ZodString>;
131
127
  lastRestart: z.ZodOptional<z.ZodUnion<readonly [z.ZodObject<{
132
128
  blockers: z.ZodArray<z.ZodObject<{
133
129
  agentId: z.ZodString;
@@ -165,6 +161,11 @@ export declare const ServerInfo: z.ZodObject<{
165
161
  }, z.core.$strip>]>>;
166
162
  ok: z.ZodLiteral<true>;
167
163
  startedAt: z.ZodString;
164
+ track: z.ZodEnum<{
165
+ stable: "stable";
166
+ canary: "canary";
167
+ dev: "dev";
168
+ }>;
168
169
  uptimeSeconds: z.ZodNumber;
169
170
  version: z.ZodString;
170
171
  }, z.core.$strip>;
@@ -1 +1 @@
1
- {"version":3,"file":"server-info.d.ts","sourceRoot":"","sources":["../../shared/server-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;iBAOjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,eAAO,MAAM,8BAA8B;;;;;;;;;;iBAOzC,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE5F,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;iBAMvC,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAExF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAUrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,uBAAuB;;;;;;iBAMlC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
1
+ {"version":3,"file":"server-info.d.ts","sourceRoot":"","sources":["../../shared/server-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,sBAAsB;;;;;;;;;;;;iBAOjC,CAAC;AACH,MAAM,MAAM,sBAAsB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAE5E,eAAO,MAAM,8BAA8B;;;;;;;;;;iBAOzC,CAAC;AACH,MAAM,MAAM,8BAA8B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAE5F,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;iBAMvC,CAAC;AACH,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,4BAA4B,CAAC,CAAC;AAExF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAGhC,CAAC;AACH,MAAM,MAAM,qBAAqB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAE1E,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAG9B,CAAC;AACH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEtE,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAWrB,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAEpD,eAAO,MAAM,uBAAuB;;;;;;iBAMlC,CAAC;AACH,MAAM,MAAM,uBAAuB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import { z } from 'zod';
2
+ import { ServerTrack } from './server-settings.js';
2
3
  export const ServicesRestartBlocker = z.object({
3
4
  agentId: z.string(),
4
5
  itemId: z.string(),
@@ -34,10 +35,11 @@ export const ServerInfo = z.object({
34
35
  animaHome: z.string(),
35
36
  commit: z.string().optional(),
36
37
  dashboardPort: z.number(),
37
- env: z.enum(['dev', 'dogfood', 'custom']),
38
+ docsUrl: z.string().url().optional(),
38
39
  lastRestart: LastServicesRestart.optional(),
39
40
  ok: z.literal(true),
40
41
  startedAt: z.string(),
42
+ track: ServerTrack,
41
43
  uptimeSeconds: z.number(),
42
44
  version: z.string(),
43
45
  });
@@ -9,4 +9,10 @@ export declare const ReleaseTrack: z.ZodEnum<{
9
9
  canary: "canary";
10
10
  }>;
11
11
  export type ReleaseTrack = z.infer<typeof ReleaseTrack>;
12
+ export declare const ServerTrack: z.ZodEnum<{
13
+ stable: "stable";
14
+ canary: "canary";
15
+ dev: "dev";
16
+ }>;
17
+ export type ServerTrack = z.infer<typeof ServerTrack>;
12
18
  //# sourceMappingURL=server-settings.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server-settings.d.ts","sourceRoot":"","sources":["../../shared/server-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;iBAGvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,YAAY;;;EAA+B,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
1
+ {"version":3,"file":"server-settings.d.ts","sourceRoot":"","sources":["../../shared/server-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;iBAGvB,CAAC;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,YAAY;;;EAA+B,CAAC;AACzD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAExD,eAAO,MAAM,WAAW;;;;EAAsC,CAAC;AAC/D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC"}
@@ -4,3 +4,4 @@ export const SidebarOrder = z.object({
4
4
  kbs: z.array(z.string()).optional(),
5
5
  });
6
6
  export const ReleaseTrack = z.enum(['stable', 'canary']);
7
+ export const ServerTrack = z.enum(['dev', 'canary', 'stable']);