@action-llama/action-llama 0.27.5 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (288) hide show
  1. package/dist/agents/credential-setup.d.ts +0 -1
  2. package/dist/agents/credential-setup.d.ts.map +1 -1
  3. package/dist/agents/credential-setup.js +2 -23
  4. package/dist/agents/credential-setup.js.map +1 -1
  5. package/dist/agents/prompt.d.ts.map +1 -1
  6. package/dist/agents/prompt.js +12 -50
  7. package/dist/agents/prompt.js.map +1 -1
  8. package/dist/agents/scheduler-tools.d.ts +47 -0
  9. package/dist/agents/scheduler-tools.d.ts.map +1 -0
  10. package/dist/agents/scheduler-tools.js +276 -0
  11. package/dist/agents/scheduler-tools.js.map +1 -0
  12. package/dist/agents/status-reporter.d.ts +1 -1
  13. package/dist/agents/status-reporter.js +1 -1
  14. package/dist/agents/transport-runner.d.ts +123 -0
  15. package/dist/agents/transport-runner.d.ts.map +1 -0
  16. package/dist/agents/transport-runner.js +791 -0
  17. package/dist/agents/transport-runner.js.map +1 -0
  18. package/dist/build-info.json +1 -1
  19. package/dist/cli/commands/add.d.ts +1 -0
  20. package/dist/cli/commands/add.d.ts.map +1 -1
  21. package/dist/cli/commands/add.js +24 -9
  22. package/dist/cli/commands/add.js.map +1 -1
  23. package/dist/cli/commands/agent.d.ts +0 -3
  24. package/dist/cli/commands/agent.d.ts.map +1 -1
  25. package/dist/cli/commands/agent.js +3 -67
  26. package/dist/cli/commands/agent.js.map +1 -1
  27. package/dist/cli/commands/logs.d.ts.map +1 -1
  28. package/dist/cli/commands/logs.js +51 -339
  29. package/dist/cli/commands/logs.js.map +1 -1
  30. package/dist/cli/main.js +1 -30
  31. package/dist/cli/main.js.map +1 -1
  32. package/dist/control/routes/dashboard-api.d.ts.map +1 -1
  33. package/dist/control/routes/dashboard-api.js +3 -2
  34. package/dist/control/routes/dashboard-api.js.map +1 -1
  35. package/dist/control/routes/log-helpers.d.ts +4 -4
  36. package/dist/control/routes/log-helpers.d.ts.map +1 -1
  37. package/dist/control/routes/log-helpers.js +12 -7
  38. package/dist/control/routes/log-helpers.js.map +1 -1
  39. package/dist/control/routes/logs.d.ts.map +1 -1
  40. package/dist/control/routes/logs.js +10 -10
  41. package/dist/control/routes/logs.js.map +1 -1
  42. package/dist/control/session-store.js +1 -1
  43. package/dist/control/session-store.js.map +1 -1
  44. package/dist/docker/image.d.ts +26 -12
  45. package/dist/docker/image.d.ts.map +1 -1
  46. package/dist/docker/image.js +80 -88
  47. package/dist/docker/image.js.map +1 -1
  48. package/dist/docker/local-runtime.js +1 -1
  49. package/dist/docker/local-runtime.js.map +1 -1
  50. package/dist/docker/providers/index.d.ts +0 -4
  51. package/dist/docker/providers/index.d.ts.map +1 -1
  52. package/dist/docker/providers/index.js +0 -38
  53. package/dist/docker/providers/index.js.map +1 -1
  54. package/dist/docker/ssh-docker-runtime.js +1 -1
  55. package/dist/docker/ssh-docker-runtime.js.map +1 -1
  56. package/dist/execution/execution.d.ts +4 -2
  57. package/dist/execution/execution.d.ts.map +1 -1
  58. package/dist/execution/execution.js +14 -9
  59. package/dist/execution/execution.js.map +1 -1
  60. package/dist/execution/index.d.ts +1 -11
  61. package/dist/execution/index.d.ts.map +1 -1
  62. package/dist/execution/index.js +1 -8
  63. package/dist/execution/index.js.map +1 -1
  64. package/dist/execution/lifecycle/agent-lifecycle.d.ts +7 -0
  65. package/dist/execution/lifecycle/agent-lifecycle.d.ts.map +1 -1
  66. package/dist/execution/lifecycle/agent-lifecycle.js +65 -5
  67. package/dist/execution/lifecycle/agent-lifecycle.js.map +1 -1
  68. package/dist/execution/lifecycle/index.d.ts +2 -2
  69. package/dist/execution/lifecycle/index.d.ts.map +1 -1
  70. package/dist/execution/lifecycle/index.js +4 -2
  71. package/dist/execution/lifecycle/index.js.map +1 -1
  72. package/dist/execution/lifecycle/instance-lifecycle.d.ts +24 -0
  73. package/dist/execution/lifecycle/instance-lifecycle.d.ts.map +1 -1
  74. package/dist/execution/lifecycle/instance-lifecycle.js +41 -3
  75. package/dist/execution/lifecycle/instance-lifecycle.js.map +1 -1
  76. package/dist/execution/runner-setup.d.ts +9 -11
  77. package/dist/execution/runner-setup.d.ts.map +1 -1
  78. package/dist/execution/runner-setup.js +19 -14
  79. package/dist/execution/runner-setup.js.map +1 -1
  80. package/dist/execution/runtime-factory.d.ts +1 -15
  81. package/dist/execution/runtime-factory.d.ts.map +1 -1
  82. package/dist/execution/runtime-factory.js +1 -18
  83. package/dist/execution/runtime-factory.js.map +1 -1
  84. package/dist/execution/waiting-registry.d.ts +84 -0
  85. package/dist/execution/waiting-registry.d.ts.map +1 -0
  86. package/dist/execution/waiting-registry.js +185 -0
  87. package/dist/execution/waiting-registry.js.map +1 -0
  88. package/dist/frontend/assets/index-Bij4b7-g.js +16 -0
  89. package/dist/frontend/assets/index-Bij4b7-g.js.map +1 -0
  90. package/dist/frontend/assets/index-D11bfFWQ.css +2 -0
  91. package/dist/frontend/index.html +2 -2
  92. package/dist/gateway/index.d.ts +1 -1
  93. package/dist/gateway/index.d.ts.map +1 -1
  94. package/dist/gateway/index.js +6 -47
  95. package/dist/gateway/index.js.map +1 -1
  96. package/dist/gateway/routes/system.d.ts +1 -4
  97. package/dist/gateway/routes/system.d.ts.map +1 -1
  98. package/dist/gateway/routes/system.js +3 -8
  99. package/dist/gateway/routes/system.js.map +1 -1
  100. package/dist/gateway/stores.d.ts +0 -4
  101. package/dist/gateway/stores.d.ts.map +1 -1
  102. package/dist/gateway/stores.js +2 -10
  103. package/dist/gateway/stores.js.map +1 -1
  104. package/dist/gateway/types.d.ts +0 -13
  105. package/dist/gateway/types.d.ts.map +1 -1
  106. package/dist/mcp/server.d.ts.map +1 -1
  107. package/dist/mcp/server.js +11 -0
  108. package/dist/mcp/server.js.map +1 -1
  109. package/dist/scheduler/gateway-setup.d.ts +0 -2
  110. package/dist/scheduler/gateway-setup.d.ts.map +1 -1
  111. package/dist/scheduler/gateway-setup.js +2 -11
  112. package/dist/scheduler/gateway-setup.js.map +1 -1
  113. package/dist/scheduler/index.d.ts.map +1 -1
  114. package/dist/scheduler/index.js +113 -55
  115. package/dist/scheduler/index.js.map +1 -1
  116. package/dist/scheduler/types.d.ts +1 -1
  117. package/dist/scheduler/types.d.ts.map +1 -1
  118. package/dist/scheduler/validation.js +1 -1
  119. package/dist/scheduler/validation.js.map +1 -1
  120. package/dist/scheduler/watcher.d.ts +2 -8
  121. package/dist/scheduler/watcher.d.ts.map +1 -1
  122. package/dist/scheduler/watcher.js +7 -104
  123. package/dist/scheduler/watcher.js.map +1 -1
  124. package/dist/shared/config/load-agent.js +2 -2
  125. package/dist/shared/config/load-agent.js.map +1 -1
  126. package/dist/shared/config/load-project.js +2 -2
  127. package/dist/shared/config/load-project.js.map +1 -1
  128. package/dist/shared/config/types.d.ts +12 -2
  129. package/dist/shared/config/types.d.ts.map +1 -1
  130. package/dist/shared/constants.d.ts +3 -1
  131. package/dist/shared/constants.d.ts.map +1 -1
  132. package/dist/shared/constants.js +4 -2
  133. package/dist/shared/constants.js.map +1 -1
  134. package/dist/shared/credential-refs.js +1 -1
  135. package/dist/shared/credential-refs.js.map +1 -1
  136. package/dist/shared/paths.d.ts.map +1 -1
  137. package/dist/shared/paths.js +2 -2
  138. package/dist/shared/paths.js.map +1 -1
  139. package/dist/shared/validation.js +1 -1
  140. package/dist/shared/validation.js.map +1 -1
  141. package/dist/transport/docker-exec.d.ts +41 -0
  142. package/dist/transport/docker-exec.d.ts.map +1 -0
  143. package/dist/transport/docker-exec.js +243 -0
  144. package/dist/transport/docker-exec.js.map +1 -0
  145. package/dist/transport/host-user.d.ts +37 -0
  146. package/dist/transport/host-user.d.ts.map +1 -0
  147. package/dist/transport/host-user.js +232 -0
  148. package/dist/transport/host-user.js.map +1 -0
  149. package/dist/transport/index.d.ts +8 -0
  150. package/dist/transport/index.d.ts.map +1 -0
  151. package/dist/transport/index.js +7 -0
  152. package/dist/transport/index.js.map +1 -0
  153. package/dist/transport/memory.d.ts +36 -0
  154. package/dist/transport/memory.d.ts.map +1 -0
  155. package/dist/transport/memory.js +113 -0
  156. package/dist/transport/memory.js.map +1 -0
  157. package/dist/transport/operations.d.ts +68 -0
  158. package/dist/transport/operations.d.ts.map +1 -0
  159. package/dist/transport/operations.js +164 -0
  160. package/dist/transport/operations.js.map +1 -0
  161. package/dist/transport/ssh.d.ts +43 -0
  162. package/dist/transport/ssh.d.ts.map +1 -0
  163. package/dist/transport/ssh.js +225 -0
  164. package/dist/transport/ssh.js.map +1 -0
  165. package/dist/transport/transport.d.ts +61 -0
  166. package/dist/transport/transport.d.ts.map +1 -0
  167. package/dist/transport/transport.js +29 -0
  168. package/dist/transport/transport.js.map +1 -0
  169. package/dist/tui/App.d.ts.map +1 -1
  170. package/dist/tui/App.js +5 -4
  171. package/dist/tui/App.js.map +1 -1
  172. package/dist/tui/status-tracker.d.ts +11 -2
  173. package/dist/tui/status-tracker.d.ts.map +1 -1
  174. package/dist/tui/status-tracker.js +44 -0
  175. package/dist/tui/status-tracker.js.map +1 -1
  176. package/package.json +7 -2
  177. package/dist/agents/bash-prefix.d.ts +0 -9
  178. package/dist/agents/bash-prefix.d.ts.map +0 -1
  179. package/dist/agents/bash-prefix.js +0 -25
  180. package/dist/agents/bash-prefix.js.map +0 -1
  181. package/dist/agents/container-entry.d.ts +0 -31
  182. package/dist/agents/container-entry.d.ts.map +0 -1
  183. package/dist/agents/container-entry.js +0 -302
  184. package/dist/agents/container-entry.js.map +0 -1
  185. package/dist/agents/container-runner.d.ts +0 -59
  186. package/dist/agents/container-runner.d.ts.map +0 -1
  187. package/dist/agents/container-runner.js +0 -472
  188. package/dist/agents/container-runner.js.map +0 -1
  189. package/dist/agents/harness/claude-cli-harness.d.ts +0 -15
  190. package/dist/agents/harness/claude-cli-harness.d.ts.map +0 -1
  191. package/dist/agents/harness/claude-cli-harness.js +0 -260
  192. package/dist/agents/harness/claude-cli-harness.js.map +0 -1
  193. package/dist/agents/harness/consumer.d.ts +0 -31
  194. package/dist/agents/harness/consumer.d.ts.map +0 -1
  195. package/dist/agents/harness/consumer.js +0 -165
  196. package/dist/agents/harness/consumer.js.map +0 -1
  197. package/dist/agents/harness/factory.d.ts +0 -9
  198. package/dist/agents/harness/factory.d.ts.map +0 -1
  199. package/dist/agents/harness/factory.js +0 -25
  200. package/dist/agents/harness/factory.js.map +0 -1
  201. package/dist/agents/harness/index.d.ts +0 -9
  202. package/dist/agents/harness/index.d.ts.map +0 -1
  203. package/dist/agents/harness/index.js +0 -5
  204. package/dist/agents/harness/index.js.map +0 -1
  205. package/dist/agents/harness/pi-harness.d.ts +0 -18
  206. package/dist/agents/harness/pi-harness.d.ts.map +0 -1
  207. package/dist/agents/harness/pi-harness.js +0 -278
  208. package/dist/agents/harness/pi-harness.js.map +0 -1
  209. package/dist/agents/harness/types.d.ts +0 -57
  210. package/dist/agents/harness/types.d.ts.map +0 -1
  211. package/dist/agents/harness/types.js +0 -2
  212. package/dist/agents/harness/types.js.map +0 -1
  213. package/dist/agents/session-loop.d.ts +0 -36
  214. package/dist/agents/session-loop.d.ts.map +0 -1
  215. package/dist/agents/session-loop.js +0 -216
  216. package/dist/agents/session-loop.js.map +0 -1
  217. package/dist/agents/signals.d.ts +0 -34
  218. package/dist/agents/signals.d.ts.map +0 -1
  219. package/dist/agents/signals.js +0 -122
  220. package/dist/agents/signals.js.map +0 -1
  221. package/dist/cli/commands/claude.d.ts +0 -4
  222. package/dist/cli/commands/claude.d.ts.map +0 -1
  223. package/dist/cli/commands/claude.js +0 -6
  224. package/dist/cli/commands/claude.js.map +0 -1
  225. package/dist/cli/commands/run-agent.d.ts +0 -14
  226. package/dist/cli/commands/run-agent.d.ts.map +0 -1
  227. package/dist/cli/commands/run-agent.js +0 -270
  228. package/dist/cli/commands/run-agent.js.map +0 -1
  229. package/dist/docker/cloud-run-runtime.d.ts +0 -48
  230. package/dist/docker/cloud-run-runtime.d.ts.map +0 -1
  231. package/dist/docker/cloud-run-runtime.js +0 -490
  232. package/dist/docker/cloud-run-runtime.js.map +0 -1
  233. package/dist/execution/call-dispatcher.d.ts +0 -11
  234. package/dist/execution/call-dispatcher.d.ts.map +0 -1
  235. package/dist/execution/call-dispatcher.js +0 -75
  236. package/dist/execution/call-dispatcher.js.map +0 -1
  237. package/dist/execution/container-registry.d.ts +0 -42
  238. package/dist/execution/container-registry.d.ts.map +0 -1
  239. package/dist/execution/container-registry.js +0 -76
  240. package/dist/execution/container-registry.js.map +0 -1
  241. package/dist/execution/image-builder.d.ts +0 -48
  242. package/dist/execution/image-builder.d.ts.map +0 -1
  243. package/dist/execution/image-builder.js +0 -155
  244. package/dist/execution/image-builder.js.map +0 -1
  245. package/dist/execution/routes/calls.d.ts +0 -18
  246. package/dist/execution/routes/calls.d.ts.map +0 -1
  247. package/dist/execution/routes/calls.js +0 -74
  248. package/dist/execution/routes/calls.js.map +0 -1
  249. package/dist/execution/routes/locks.d.ts +0 -10
  250. package/dist/execution/routes/locks.d.ts.map +0 -1
  251. package/dist/execution/routes/locks.js +0 -166
  252. package/dist/execution/routes/locks.js.map +0 -1
  253. package/dist/execution/routes/shutdown.d.ts +0 -5
  254. package/dist/execution/routes/shutdown.d.ts.map +0 -1
  255. package/dist/execution/routes/shutdown.js +0 -24
  256. package/dist/execution/routes/shutdown.js.map +0 -1
  257. package/dist/execution/routes/signals.d.ts +0 -12
  258. package/dist/execution/routes/signals.d.ts.map +0 -1
  259. package/dist/execution/routes/signals.js +0 -123
  260. package/dist/execution/routes/signals.js.map +0 -1
  261. package/dist/execution/types.d.ts +0 -23
  262. package/dist/execution/types.d.ts.map +0 -1
  263. package/dist/execution/types.js +0 -2
  264. package/dist/execution/types.js.map +0 -1
  265. package/dist/frontend/assets/index-DnSu-8Kw.js +0 -16
  266. package/dist/frontend/assets/index-DnSu-8Kw.js.map +0 -1
  267. package/dist/frontend/assets/index-Z0IOXEax.css +0 -2
  268. package/dist/gateway/routes/execution.d.ts +0 -24
  269. package/dist/gateway/routes/execution.d.ts.map +0 -1
  270. package/dist/gateway/routes/execution.js +0 -13
  271. package/dist/gateway/routes/execution.js.map +0 -1
  272. package/dist/scheduler/orphan-recovery.d.ts +0 -25
  273. package/dist/scheduler/orphan-recovery.d.ts.map +0 -1
  274. package/dist/scheduler/orphan-recovery.js +0 -144
  275. package/dist/scheduler/orphan-recovery.js.map +0 -1
  276. package/docker/bin/_http-exit +0 -35
  277. package/docker/bin/al-exit +0 -4
  278. package/docker/bin/al-export +0 -50
  279. package/docker/bin/al-rerun +0 -8
  280. package/docker/bin/al-return +0 -14
  281. package/docker/bin/al-shutdown +0 -5
  282. package/docker/bin/al-status +0 -9
  283. package/docker/bin/al-subagent +0 -13
  284. package/docker/bin/al-subagent-check +0 -10
  285. package/docker/bin/al-subagent-wait +0 -37
  286. package/docker/bin/rlock +0 -12
  287. package/docker/bin/rlock-heartbeat +0 -12
  288. package/docker/bin/runlock +0 -12
@@ -1,2 +0,0 @@
1
- /*! tailwindcss v4.2.2 | MIT License | https://tailwindcss.com */
2
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-ordinal:initial;--tw-slashed-zero:initial;--tw-numeric-figure:initial;--tw-numeric-spacing:initial;--tw-numeric-fraction:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-backdrop-blur:initial;--tw-backdrop-brightness:initial;--tw-backdrop-contrast:initial;--tw-backdrop-grayscale:initial;--tw-backdrop-hue-rotate:initial;--tw-backdrop-invert:initial;--tw-backdrop-opacity:initial;--tw-backdrop-saturate:initial;--tw-backdrop-sepia:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-200:oklch(88.5% .062 18.334);--color-red-300:oklch(80.8% .114 19.571);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-red-900:oklch(39.6% .141 25.723);--color-red-950:oklch(25.8% .092 26.042);--color-orange-50:oklch(98% .016 73.684);--color-orange-400:oklch(75% .183 55.934);--color-orange-600:oklch(64.6% .222 41.116);--color-orange-900:oklch(40.8% .123 38.172);--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-400:oklch(82.8% .189 84.429);--color-amber-500:oklch(76.9% .188 70.08);--color-amber-600:oklch(66.6% .179 58.318);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-200:oklch(94.5% .129 101.54);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-600:oklch(68.1% .162 75.834);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-yellow-900:oklch(42.1% .095 57.708);--color-yellow-950:oklch(28.6% .066 53.813);--color-green-50:oklch(98.2% .018 155.826);--color-green-200:oklch(92.5% .084 155.995);--color-green-400:oklch(79.2% .209 151.711);--color-green-500:oklch(72.3% .219 149.579);--color-green-600:oklch(62.7% .194 149.214);--color-green-700:oklch(52.7% .154 150.069);--color-green-800:oklch(44.8% .119 151.328);--color-green-900:oklch(39.3% .095 152.535);--color-teal-50:oklch(98.4% .014 180.72);--color-teal-400:oklch(77.7% .152 181.912);--color-teal-600:oklch(60% .118 184.704);--color-teal-900:oklch(38.6% .063 188.416);--color-cyan-400:oklch(78.9% .154 211.53);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-400:oklch(74.6% .16 232.661);--color-sky-600:oklch(58.8% .158 241.966);--color-sky-900:oklch(39.1% .09 240.876);--color-blue-50:oklch(97% .014 254.604);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-300:oklch(80.9% .105 251.813);--color-blue-400:oklch(70.7% .165 254.624);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-600:oklch(54.6% .245 262.881);--color-blue-700:oklch(48.8% .243 264.376);--color-blue-900:oklch(37.9% .146 265.522);--color-blue-950:oklch(28.2% .091 267.935);--color-indigo-50:oklch(96.2% .018 272.314);--color-indigo-400:oklch(67.3% .182 276.935);--color-indigo-600:oklch(51.1% .262 276.966);--color-indigo-900:oklch(35.9% .144 278.697);--color-violet-50:oklch(96.9% .016 293.756);--color-violet-400:oklch(70.2% .183 293.541);--color-violet-600:oklch(54.1% .281 293.009);--color-violet-900:oklch(38% .189 293.745);--color-purple-50:oklch(97.7% .014 308.299);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-200:oklch(90.2% .063 306.703);--color-purple-300:oklch(82.7% .119 306.383);--color-purple-400:oklch(71.4% .203 305.504);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-700:oklch(49.6% .265 301.924);--color-purple-900:oklch(38.1% .176 304.987);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-black:#000;--color-white:#fff;--spacing:.25rem;--container-sm:24rem;--container-md:28rem;--container-2xl:42rem;--container-7xl:80rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--font-weight-normal:400;--font-weight-medium:500;--font-weight-semibold:600;--font-weight-bold:700;--tracking-normal:0em;--tracking-wide:.025em;--leading-relaxed:1.625;--radius-md:.375rem;--radius-lg:.5rem;--radius-xl:.75rem;--animate-spin:spin 1s linear infinite;--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--blur-sm:8px;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.pointer-events-auto{pointer-events:auto}.pointer-events-none{pointer-events:none}.visible{visibility:visible}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.sticky{position:sticky}.inset-0{inset:calc(var(--spacing) * 0)}.inset-x-0{inset-inline:calc(var(--spacing) * 0)}.start{inset-inline-start:var(--spacing)}.end{inset-inline-end:var(--spacing)}.top-0{top:calc(var(--spacing) * 0)}.top-1\/2{top:50%}.right-0{right:calc(var(--spacing) * 0)}.right-1\.5{right:calc(var(--spacing) * 1.5)}.z-10{z-index:10}.z-50{z-index:50}.mx-4{margin-inline:calc(var(--spacing) * 4)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.mr-1{margin-right:calc(var(--spacing) * 1)}.mr-1\.5{margin-right:calc(var(--spacing) * 1.5)}.mb-1{margin-bottom:calc(var(--spacing) * 1)}.mb-1\.5{margin-bottom:calc(var(--spacing) * 1.5)}.mb-2{margin-bottom:calc(var(--spacing) * 2)}.mb-3{margin-bottom:calc(var(--spacing) * 3)}.mb-4{margin-bottom:calc(var(--spacing) * 4)}.mb-6{margin-bottom:calc(var(--spacing) * 6)}.ml-1{margin-left:calc(var(--spacing) * 1)}.ml-2{margin-left:calc(var(--spacing) * 2)}.line-clamp-2{-webkit-line-clamp:2;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.block{display:block}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.table{display:table}.h-1\.5{height:calc(var(--spacing) * 1.5)}.h-2{height:calc(var(--spacing) * 2)}.h-2\.5{height:calc(var(--spacing) * 2.5)}.h-3{height:calc(var(--spacing) * 3)}.h-3\.5{height:calc(var(--spacing) * 3.5)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-full{height:100%}.max-h-64{max-height:calc(var(--spacing) * 64)}.max-h-96{max-height:calc(var(--spacing) * 96)}.max-h-\[calc\(100vh-16rem\)\]{max-height:calc(100vh - 16rem)}.min-h-\[32rem\]{min-height:32rem}.min-h-screen{min-height:100vh}.w-1\.5{width:calc(var(--spacing) * 1.5)}.w-2{width:calc(var(--spacing) * 2)}.w-2\.5{width:calc(var(--spacing) * 2.5)}.w-3{width:calc(var(--spacing) * 3)}.w-3\.5{width:calc(var(--spacing) * 3.5)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-10{width:calc(var(--spacing) * 10)}.w-16{width:calc(var(--spacing) * 16)}.w-20{width:calc(var(--spacing) * 20)}.w-40{width:calc(var(--spacing) * 40)}.w-48{width:calc(var(--spacing) * 48)}.w-full{width:100%}.max-w-2xl{max-width:var(--container-2xl)}.max-w-7xl{max-width:var(--container-7xl)}.max-w-\[160px\]{max-width:160px}.max-w-\[200px\]{max-width:200px}.max-w-\[240px\]{max-width:240px}.max-w-\[300px\]{max-width:300px}.max-w-none{max-width:none}.max-w-sm{max-width:var(--container-sm)}.min-w-0{min-width:calc(var(--spacing) * 0)}.min-w-\[160px\]{min-width:160px}.min-w-\[180px\]{min-width:180px}.flex-1{flex:1}.flex-shrink-0,.shrink-0{flex-shrink:0}.border-collapse{border-collapse:collapse}.-translate-y-1\/2{--tw-translate-y:calc(calc(1 / 2 * 100%) * -1);translate:var(--tw-translate-x) var(--tw-translate-y)}.animate-pulse{animation:var(--animate-pulse)}.animate-spin{animation:var(--animate-spin)}.cursor-pointer{cursor:pointer}.resize-none{resize:none}.list-inside{list-style-position:inside}.list-decimal{list-style-type:decimal}.list-disc{list-style-type:disc}.grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-cols-\[8rem_1fr\]{grid-template-columns:8rem 1fr}.flex-col{flex-direction:column}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.justify-end{justify-content:flex-end}.gap-0\.5{gap:calc(var(--spacing) * .5)}.gap-1{gap:calc(var(--spacing) * 1)}.gap-1\.5{gap:calc(var(--spacing) * 1.5)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-6{gap:calc(var(--spacing) * 6)}:where(.space-y-0\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * .5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * .5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.gap-x-4{column-gap:calc(var(--spacing) * 4)}.gap-x-6{column-gap:calc(var(--spacing) * 6)}.gap-y-3{row-gap:calc(var(--spacing) * 3)}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-xl{border-radius:var(--radius-xl)}.rounded-l-md{border-top-left-radius:var(--radius-md);border-bottom-left-radius:var(--radius-md)}.rounded-r-md{border-top-right-radius:var(--radius-md);border-bottom-right-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-b-2{border-bottom-style:var(--tw-border-style);border-bottom-width:2px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-2{border-left-style:var(--tw-border-style);border-left-width:2px}.border-blue-600{border-color:var(--color-blue-600)}.border-green-200{border-color:var(--color-green-200)}.border-green-700{border-color:var(--color-green-700)}.border-purple-700{border-color:var(--color-purple-700)}.border-red-200{border-color:var(--color-red-200)}.border-red-700{border-color:var(--color-red-700)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-800{border-color:var(--color-slate-800)}.border-yellow-200{border-color:var(--color-yellow-200)}.border-l-amber-400{border-left-color:var(--color-amber-400)}.border-l-blue-500{border-left-color:var(--color-blue-500)}.border-l-green-500{border-left-color:var(--color-green-500)}.border-l-red-300{border-left-color:var(--color-red-300)}.border-l-red-500{border-left-color:var(--color-red-500)}.border-l-yellow-500{border-left-color:var(--color-yellow-500)}.bg-amber-50{background-color:var(--color-amber-50)}.bg-amber-50\/40{background-color:#fffbeb66}@supports (color:color-mix(in lab, red, red)){.bg-amber-50\/40{background-color:color-mix(in oklab, var(--color-amber-50) 40%, transparent)}}.bg-amber-100{background-color:var(--color-amber-100)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-blue-50{background-color:var(--color-blue-50)}.bg-blue-50\/40{background-color:#eff6ff66}@supports (color:color-mix(in lab, red, red)){.bg-blue-50\/40{background-color:color-mix(in oklab, var(--color-blue-50) 40%, transparent)}}.bg-blue-100{background-color:var(--color-blue-100)}.bg-blue-500{background-color:var(--color-blue-500)}.bg-blue-600{background-color:var(--color-blue-600)}.bg-green-50{background-color:var(--color-green-50)}.bg-green-500{background-color:var(--color-green-500)}.bg-green-600{background-color:var(--color-green-600)}.bg-indigo-50{background-color:var(--color-indigo-50)}.bg-orange-50{background-color:var(--color-orange-50)}.bg-purple-50{background-color:var(--color-purple-50)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-purple-600{background-color:var(--color-purple-600)}.bg-purple-900\/95{background-color:#59168bf2}@supports (color:color-mix(in lab, red, red)){.bg-purple-900\/95{background-color:color-mix(in oklab, var(--color-purple-900) 95%, transparent)}}.bg-red-50{background-color:var(--color-red-50)}.bg-red-50\/20{background-color:#fef2f233}@supports (color:color-mix(in lab, red, red)){.bg-red-50\/20{background-color:color-mix(in oklab, var(--color-red-50) 20%, transparent)}}.bg-red-50\/30{background-color:#fef2f24d}@supports (color:color-mix(in lab, red, red)){.bg-red-50\/30{background-color:color-mix(in oklab, var(--color-red-50) 30%, transparent)}}.bg-red-100{background-color:var(--color-red-100)}.bg-red-300{background-color:var(--color-red-300)}.bg-red-500{background-color:var(--color-red-500)}.bg-red-600{background-color:var(--color-red-600)}.bg-red-900\/95{background-color:#82181af2}@supports (color:color-mix(in lab, red, red)){.bg-red-900\/95{background-color:color-mix(in oklab, var(--color-red-900) 95%, transparent)}}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-200{background-color:var(--color-slate-200)}.bg-slate-400{background-color:var(--color-slate-400)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-teal-50{background-color:var(--color-teal-50)}.bg-violet-50{background-color:var(--color-violet-50)}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-50\/40{background-color:#fefce866}@supports (color:color-mix(in lab, red, red)){.bg-yellow-50\/40{background-color:color-mix(in oklab, var(--color-yellow-50) 40%, transparent)}}.bg-yellow-500{background-color:var(--color-yellow-500)}.bg-yellow-600{background-color:var(--color-yellow-600)}.p-1{padding:calc(var(--spacing) * 1)}.p-1\.5{padding:calc(var(--spacing) * 1.5)}.p-2{padding:calc(var(--spacing) * 2)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-0{padding-block:calc(var(--spacing) * 0)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-12{padding-block:calc(var(--spacing) * 12)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-7{padding-right:calc(var(--spacing) * 7)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-0{padding-left:calc(var(--spacing) * 0)}.pl-2{padding-left:calc(var(--spacing) * 2)}.pl-3{padding-left:calc(var(--spacing) * 3)}.pl-4{padding-left:calc(var(--spacing) * 4)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[10px\]{font-size:10px}.leading-4{--tw-leading:calc(var(--spacing) * 4);line-height:calc(var(--spacing) * 4)}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-normal{white-space:normal}.whitespace-nowrap{white-space:nowrap}.whitespace-pre-wrap{white-space:pre-wrap}.text-amber-600{color:var(--color-amber-600)}.text-amber-700{color:var(--color-amber-700)}.text-blue-400{color:var(--color-blue-400)}.text-blue-500{color:var(--color-blue-500)}.text-blue-600{color:var(--color-blue-600)}.text-blue-700{color:var(--color-blue-700)}.text-cyan-400{color:var(--color-cyan-400)}.text-green-500{color:var(--color-green-500)}.text-green-600{color:var(--color-green-600)}.text-green-700{color:var(--color-green-700)}.text-indigo-600{color:var(--color-indigo-600)}.text-orange-600{color:var(--color-orange-600)}.text-purple-100{color:var(--color-purple-100)}.text-purple-300{color:var(--color-purple-300)}.text-purple-400{color:var(--color-purple-400)}.text-purple-600{color:var(--color-purple-600)}.text-purple-700{color:var(--color-purple-700)}.text-red-200{color:var(--color-red-200)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-sky-600{color:var(--color-sky-600)}.text-slate-300{color:var(--color-slate-300)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-teal-600{color:var(--color-teal-600)}.text-violet-600{color:var(--color-violet-600)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-600{color:var(--color-yellow-600)}.text-yellow-700{color:var(--color-yellow-700)}.normal-case{text-transform:none}.uppercase{text-transform:uppercase}.italic{font-style:italic}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.underline{text-decoration-line:underline}.placeholder-slate-400::placeholder{color:var(--color-slate-400)}.opacity-25{opacity:.25}.opacity-75{opacity:.75}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}.last\:border-0:last-child{border-style:var(--tw-border-style);border-width:0}.last\:border-b-0:last-child{border-bottom-style:var(--tw-border-style);border-bottom-width:0}@media (hover:hover){.hover\:border-slate-300:hover{border-color:var(--color-slate-300)}.hover\:bg-blue-700:hover{background-color:var(--color-blue-700)}.hover\:bg-green-700:hover{background-color:var(--color-green-700)}.hover\:bg-purple-700:hover{background-color:var(--color-purple-700)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-100\/50:hover{background-color:#f1f5f980}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-100\/50:hover{background-color:color-mix(in oklab, var(--color-slate-100) 50%, transparent)}}.hover\:bg-slate-100\/60:hover{background-color:#f1f5f999}@supports (color:color-mix(in lab, red, red)){.hover\:bg-slate-100\/60:hover{background-color:color-mix(in oklab, var(--color-slate-100) 60%, transparent)}}.hover\:bg-slate-300:hover{background-color:var(--color-slate-300)}.hover\:bg-yellow-700:hover{background-color:var(--color-yellow-700)}.hover\:text-blue-300:hover{color:var(--color-blue-300)}.hover\:text-blue-600:hover{color:var(--color-blue-600)}.hover\:text-blue-700:hover{color:var(--color-blue-700)}.hover\:text-purple-200:hover{color:var(--color-purple-200)}.hover\:text-red-200:hover{color:var(--color-red-200)}.hover\:text-slate-600:hover{color:var(--color-slate-600)}.hover\:text-slate-700:hover{color:var(--color-slate-700)}.hover\:text-slate-900:hover{color:var(--color-slate-900)}.hover\:underline:hover{text-decoration-line:underline}}.focus\:border-blue-500:focus{border-color:var(--color-blue-500)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500:focus{--tw-ring-color:var(--color-blue-500)}.focus\:outline-none:focus{--tw-outline-style:none;outline-style:none}.disabled\:cursor-not-allowed:disabled{cursor:not-allowed}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-40:disabled{opacity:.4}.disabled\:opacity-50:disabled{opacity:.5}@media (hover:hover){.disabled\:hover\:text-slate-400:disabled:hover{color:var(--color-slate-400)}}@media (width>=40rem){.sm\:col-span-2{grid-column:span 2/span 2}.sm\:mx-4{margin-inline:calc(var(--spacing) * 4)}.sm\:hidden{display:none}.sm\:inline{display:inline}.sm\:h-4{height:calc(var(--spacing) * 4)}.sm\:h-auto{height:auto}.sm\:w-4{width:calc(var(--spacing) * 4)}.sm\:max-w-md{max-width:var(--container-md)}.sm\:flex-none{flex:none}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:rounded-lg{border-radius:var(--radius-lg)}.sm\:border{border-style:var(--tw-border-style);border-width:1px}.sm\:p-4{padding:calc(var(--spacing) * 4)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}}@media (width>=48rem){.md\:block{display:block}.md\:hidden{display:none}.md\:table-cell{display:table-cell}.md\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.md\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media (width>=64rem){.lg\:hidden{display:none}.lg\:table-cell{display:table-cell}.lg\:grid-cols-6{grid-template-columns:repeat(6,minmax(0,1fr))}}:where(.dark\:divide-slate-800\/50:where(.dark,.dark *)>:not(:last-child)){border-color:#1d293d80}@supports (color:color-mix(in lab, red, red)){:where(.dark\:divide-slate-800\/50:where(.dark,.dark *)>:not(:last-child)){border-color:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.dark\:border-blue-400:where(.dark,.dark *){border-color:var(--color-blue-400)}.dark\:border-green-800:where(.dark,.dark *){border-color:var(--color-green-800)}.dark\:border-red-800:where(.dark,.dark *){border-color:var(--color-red-800)}.dark\:border-slate-600:where(.dark,.dark *){border-color:var(--color-slate-600)}.dark\:border-slate-700:where(.dark,.dark *){border-color:var(--color-slate-700)}.dark\:border-slate-800:where(.dark,.dark *){border-color:var(--color-slate-800)}.dark\:border-slate-800\/50:where(.dark,.dark *){border-color:#1d293d80}@supports (color:color-mix(in lab, red, red)){.dark\:border-slate-800\/50:where(.dark,.dark *){border-color:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.dark\:border-yellow-800:where(.dark,.dark *){border-color:var(--color-yellow-800)}.dark\:border-l-amber-500:where(.dark,.dark *){border-left-color:var(--color-amber-500)}.dark\:border-l-blue-400:where(.dark,.dark *){border-left-color:var(--color-blue-400)}.dark\:border-l-green-400:where(.dark,.dark *){border-left-color:var(--color-green-400)}.dark\:border-l-red-400:where(.dark,.dark *){border-left-color:var(--color-red-400)}.dark\:border-l-red-700:where(.dark,.dark *){border-left-color:var(--color-red-700)}.dark\:border-l-yellow-400:where(.dark,.dark *){border-left-color:var(--color-yellow-400)}.dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:#7b33064d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-900) 30%, transparent)}}.dark\:bg-amber-900\/40:where(.dark,.dark *){background-color:#7b330666}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-900) 40%, transparent)}}.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:#46190133}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 20%, transparent)}}.dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:#1c398e4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-900) 30%, transparent)}}.dark\:bg-blue-900\/40:where(.dark,.dark *){background-color:#1c398e66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-900) 40%, transparent)}}.dark\:bg-blue-950\/20:where(.dark,.dark *){background-color:#16245633}@supports (color:color-mix(in lab, red, red)){.dark\:bg-blue-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-blue-950) 20%, transparent)}}.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:#0d542b33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 20%, transparent)}}.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:#0d542b4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-green-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-green-900) 30%, transparent)}}.dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:#312c854d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-indigo-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-indigo-900) 30%, transparent)}}.dark\:bg-orange-900\/30:where(.dark,.dark *){background-color:#7e2a0c4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-orange-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-orange-900) 30%, transparent)}}.dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:#59168b4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-900) 30%, transparent)}}.dark\:bg-purple-900\/40:where(.dark,.dark *){background-color:#59168b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-purple-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-purple-900) 40%, transparent)}}.dark\:bg-red-800:where(.dark,.dark *){background-color:var(--color-red-800)}.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:#82181a33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 20%, transparent)}}.dark\:bg-red-900\/40:where(.dark,.dark *){background-color:#82181a66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-900\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-900) 40%, transparent)}}.dark\:bg-red-950\/10:where(.dark,.dark *){background-color:#4608091a}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-950\/10:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-950) 10%, transparent)}}.dark\:bg-red-950\/20:where(.dark,.dark *){background-color:#46080933}@supports (color:color-mix(in lab, red, red)){.dark\:bg-red-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-red-950) 20%, transparent)}}.dark\:bg-sky-900\/30:where(.dark,.dark *){background-color:#024a704d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-sky-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-sky-900) 30%, transparent)}}.dark\:bg-slate-700:where(.dark,.dark *){background-color:var(--color-slate-700)}.dark\:bg-slate-800:where(.dark,.dark *){background-color:var(--color-slate-800)}.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:#1d293d80}@supports (color:color-mix(in lab, red, red)){.dark\:bg-slate-800\/50:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-slate-800) 50%, transparent)}}.dark\:bg-slate-900:where(.dark,.dark *){background-color:var(--color-slate-900)}.dark\:bg-slate-950:where(.dark,.dark *){background-color:var(--color-slate-950)}.dark\:bg-teal-900\/30:where(.dark,.dark *){background-color:#0b4f4a4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-teal-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-teal-900) 30%, transparent)}}.dark\:bg-violet-900\/30:where(.dark,.dark *){background-color:#4d179a4d}@supports (color:color-mix(in lab, red, red)){.dark\:bg-violet-900\/30:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-violet-900) 30%, transparent)}}.dark\:bg-yellow-900\/20:where(.dark,.dark *){background-color:#733e0a33}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-900\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-yellow-900) 20%, transparent)}}.dark\:bg-yellow-950\/20:where(.dark,.dark *){background-color:#43200433}@supports (color:color-mix(in lab, red, red)){.dark\:bg-yellow-950\/20:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-yellow-950) 20%, transparent)}}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-amber-400:where(.dark,.dark *){color:var(--color-amber-400)}.dark\:text-blue-300:where(.dark,.dark *){color:var(--color-blue-300)}.dark\:text-blue-400:where(.dark,.dark *){color:var(--color-blue-400)}.dark\:text-green-400:where(.dark,.dark *){color:var(--color-green-400)}.dark\:text-indigo-400:where(.dark,.dark *){color:var(--color-indigo-400)}.dark\:text-orange-400:where(.dark,.dark *){color:var(--color-orange-400)}.dark\:text-purple-300:where(.dark,.dark *){color:var(--color-purple-300)}.dark\:text-purple-400:where(.dark,.dark *){color:var(--color-purple-400)}.dark\:text-red-300:where(.dark,.dark *){color:var(--color-red-300)}.dark\:text-red-400:where(.dark,.dark *){color:var(--color-red-400)}.dark\:text-sky-400:where(.dark,.dark *){color:var(--color-sky-400)}.dark\:text-slate-200:where(.dark,.dark *){color:var(--color-slate-200)}.dark\:text-slate-300:where(.dark,.dark *){color:var(--color-slate-300)}.dark\:text-slate-400:where(.dark,.dark *){color:var(--color-slate-400)}.dark\:text-slate-500:where(.dark,.dark *){color:var(--color-slate-500)}.dark\:text-slate-600:where(.dark,.dark *){color:var(--color-slate-600)}.dark\:text-teal-400:where(.dark,.dark *){color:var(--color-teal-400)}.dark\:text-violet-400:where(.dark,.dark *){color:var(--color-violet-400)}.dark\:text-white:where(.dark,.dark *){color:var(--color-white)}.dark\:text-yellow-400:where(.dark,.dark *){color:var(--color-yellow-400)}.dark\:placeholder-slate-500:where(.dark,.dark *)::placeholder{color:var(--color-slate-500)}@media (hover:hover){.dark\:hover\:border-slate-600:where(.dark,.dark *):hover{border-color:var(--color-slate-600)}.dark\:hover\:bg-slate-600:where(.dark,.dark *):hover{background-color:var(--color-slate-600)}.dark\:hover\:bg-slate-700:where(.dark,.dark *):hover{background-color:var(--color-slate-700)}.dark\:hover\:bg-slate-700\/50:where(.dark,.dark *):hover{background-color:#31415880}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-700\/50:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-700) 50%, transparent)}}.dark\:hover\:bg-slate-800:where(.dark,.dark *):hover{background-color:var(--color-slate-800)}.dark\:hover\:bg-slate-800\/30:where(.dark,.dark *):hover{background-color:#1d293d4d}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-800\/30:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-800) 30%, transparent)}}.dark\:hover\:bg-slate-800\/40:where(.dark,.dark *):hover{background-color:#1d293d66}@supports (color:color-mix(in lab, red, red)){.dark\:hover\:bg-slate-800\/40:where(.dark,.dark *):hover{background-color:color-mix(in oklab, var(--color-slate-800) 40%, transparent)}}.dark\:hover\:text-blue-300:where(.dark,.dark *):hover{color:var(--color-blue-300)}.dark\:hover\:text-blue-400:where(.dark,.dark *):hover{color:var(--color-blue-400)}.dark\:hover\:text-slate-200:where(.dark,.dark *):hover{color:var(--color-slate-200)}.dark\:hover\:text-slate-300:where(.dark,.dark *):hover{color:var(--color-slate-300)}.dark\:hover\:text-white:where(.dark,.dark *):hover{color:var(--color-white)}}.dark\:focus\:border-blue-400:where(.dark,.dark *):focus{border-color:var(--color-blue-400)}@media (hover:hover){.dark\:disabled\:hover\:text-slate-500:where(.dark,.dark *):disabled:hover{color:var(--color-slate-500)}}}.agent-color-bg{background:hsl(var(--agent-hue) 70% 80%)}.agent-color-bg:where(.dark,.dark *){background:hsl(var(--agent-hue) 50% 35%)}.agent-color-text{color:hsl(var(--agent-hue) 60% 40%)}.agent-color-text:where(.dark,.dark *){color:hsl(var(--agent-hue) 60% 70%)}.state-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.scrollbar-thin::-webkit-scrollbar{width:6px}.scrollbar-thin::-webkit-scrollbar-track{background:0 0}.scrollbar-thin::-webkit-scrollbar-thumb{background:#334155;border-radius:3px}input,textarea,select{font-size:1rem}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.5}}
@@ -1,24 +0,0 @@
1
- import type { Hono } from "hono";
2
- import { type CallDispatcher } from "../../execution/routes/calls.js";
3
- import { type SignalContext } from "../../execution/routes/signals.js";
4
- import type { ContainerRegistry } from "../../execution/container-registry.js";
5
- import type { LockStore } from "../../execution/lock-store.js";
6
- import type { CallStore } from "../../execution/call-store.js";
7
- import type { Logger } from "../../shared/logger.js";
8
- import type { StatusTracker } from "../../tui/status-tracker.js";
9
- import type { SchedulerEventBus } from "../../scheduler/events.js";
10
- /**
11
- * Register execution-plane routes: locks, calls, and signals.
12
- */
13
- export declare function registerExecutionRoutes(app: Hono, opts: {
14
- containerRegistry: ContainerRegistry;
15
- lockStore: LockStore;
16
- callStore: CallStore;
17
- callDispatcherProvider: () => CallDispatcher | undefined;
18
- logger: Logger;
19
- statusTracker?: StatusTracker;
20
- signalContext?: SignalContext;
21
- skipStatusEndpoint?: boolean;
22
- events?: SchedulerEventBus;
23
- }): void;
24
- //# sourceMappingURL=execution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execution.d.ts","sourceRoot":"","sources":["../../../src/gateway/routes/execution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAwB,KAAK,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAC7F,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAEnE;;GAEG;AACH,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,IAAI,EACT,IAAI,EAAE;IACJ,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,sBAAsB,EAAE,MAAM,cAAc,GAAG,SAAS,CAAC;IACzD,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B,MAAM,CAAC,EAAE,iBAAiB,CAAC;CAC5B,GACA,IAAI,CAgBN"}
@@ -1,13 +0,0 @@
1
- import { registerLockRoutes } from "../../execution/routes/locks.js";
2
- import { registerCallRoutes } from "../../execution/routes/calls.js";
3
- import { registerSignalRoutes } from "../../execution/routes/signals.js";
4
- /**
5
- * Register execution-plane routes: locks, calls, and signals.
6
- */
7
- export function registerExecutionRoutes(app, opts) {
8
- const { containerRegistry, lockStore, callStore, callDispatcherProvider, logger, statusTracker, signalContext, skipStatusEndpoint, events, } = opts;
9
- registerLockRoutes(app, containerRegistry, lockStore, logger, { skipStatusEndpoint, events });
10
- registerCallRoutes(app, containerRegistry, callStore, callDispatcherProvider, logger, events);
11
- registerSignalRoutes(app, containerRegistry, logger, statusTracker, signalContext, events);
12
- }
13
- //# sourceMappingURL=execution.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"execution.js","sourceRoot":"","sources":["../../../src/gateway/routes/execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAuB,MAAM,iCAAiC,CAAC;AAC1F,OAAO,EAAE,oBAAoB,EAAsB,MAAM,mCAAmC,CAAC;AAQ7F;;GAEG;AACH,MAAM,UAAU,uBAAuB,CACrC,GAAS,EACT,IAUC;IAED,MAAM,EACJ,iBAAiB,EACjB,SAAS,EACT,SAAS,EACT,sBAAsB,EACtB,MAAM,EACN,aAAa,EACb,aAAa,EACb,kBAAkB,EAClB,MAAM,GACP,GAAG,IAAI,CAAC;IAET,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,kBAAkB,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,kBAAkB,CAAC,GAAG,EAAE,iBAAiB,EAAE,SAAS,EAAE,sBAAsB,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9F,oBAAoB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;AAC7F,CAAC"}
@@ -1,25 +0,0 @@
1
- import type { AgentConfig } from "../shared/config.js";
2
- import type { Logger } from "../shared/logger.js";
3
- import type { Runtime } from "../docker/runtime.js";
4
- import type { RunnerPool } from "../execution/runner-pool.js";
5
- import type { GatewayServer } from "../gateway/index.js";
6
- import type { SchedulerContext } from "../execution/execution.js";
7
- export interface OrphanRecoveryOpts {
8
- runtime: Runtime;
9
- gateway: GatewayServer;
10
- runnerPools: Record<string, RunnerPool>;
11
- activeAgentConfigs: AgentConfig[];
12
- schedulerState: {
13
- schedulerCtx: SchedulerContext | null;
14
- };
15
- logger: Logger;
16
- }
17
- /**
18
- * Re-adopt orphan containers from a previous scheduler run, or clean up
19
- * stale container registry entries.
20
- *
21
- * This is a scheduler-startup concern that orchestrates across the execution
22
- * plane (runtime, runner pools) and the gateway (container registry, lock store).
23
- */
24
- export declare function recoverOrphanContainers(opts: OrphanRecoveryOpts): Promise<void>;
25
- //# sourceMappingURL=orphan-recovery.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orphan-recovery.d.ts","sourceRoot":"","sources":["../../src/scheduler/orphan-recovery.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAGlE,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,aAAa,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxC,kBAAkB,EAAE,WAAW,EAAE,CAAC;IAClC,cAAc,EAAE;QAAE,YAAY,EAAE,gBAAgB,GAAG,IAAI,CAAA;KAAE,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0HrF"}
@@ -1,144 +0,0 @@
1
- // packages/action-llama/src/scheduler/orphan-recovery.ts
2
- import { drainQueues } from "../execution/execution.js";
3
- /**
4
- * Re-adopt orphan containers from a previous scheduler run, or clean up
5
- * stale container registry entries.
6
- *
7
- * This is a scheduler-startup concern that orchestrates across the execution
8
- * plane (runtime, runner pools) and the gateway (container registry, lock store).
9
- */
10
- export async function recoverOrphanContainers(opts) {
11
- const { runtime, gateway, runnerPools, activeAgentConfigs, schedulerState, logger } = opts;
12
- try {
13
- const ownAgentNames = new Set(activeAgentConfigs.map((a) => a.name));
14
- const orphans = (await runtime.listRunningAgents()).filter((o) => ownAgentNames.has(o.agentName));
15
- if (orphans.length > 0) {
16
- const registeredContainers = gateway.containerRegistry.listAll();
17
- const runningNames = new Set(orphans.map((o) => o.taskId));
18
- let adopted = 0;
19
- let killed = 0;
20
- for (const orphan of orphans) {
21
- const found = gateway.containerRegistry.findByContainerName(orphan.taskId);
22
- if (!found) {
23
- // Container exists but has no registry entry — unknown, kill it
24
- logger.warn({ agent: orphan.agentName, task: orphan.taskId }, "killing unregistered orphan container");
25
- try {
26
- await runtime.kill(orphan.taskId);
27
- await runtime.remove(orphan.taskId);
28
- }
29
- catch { }
30
- killed++;
31
- continue;
32
- }
33
- const { secret: oldSecret, reg } = found;
34
- const pool = runnerPools[orphan.agentName];
35
- if (!pool) {
36
- logger.warn({ agent: orphan.agentName, task: orphan.taskId }, "no runner pool for orphan, killing");
37
- try {
38
- await runtime.kill(orphan.taskId);
39
- await runtime.remove(orphan.taskId);
40
- }
41
- catch { }
42
- gateway.lockStore.releaseAll(reg.instanceId);
43
- await gateway.containerRegistry.unregister(oldSecret);
44
- killed++;
45
- continue;
46
- }
47
- // Get shutdown secret from container env vars
48
- let shutdownSecret;
49
- if (runtime.inspectContainer) {
50
- const info = await runtime.inspectContainer(orphan.taskId);
51
- shutdownSecret = info?.env?.SHUTDOWN_SECRET;
52
- }
53
- if (!shutdownSecret) {
54
- logger.warn({ agent: orphan.agentName, task: orphan.taskId }, "cannot read SHUTDOWN_SECRET from orphan, killing");
55
- try {
56
- await runtime.kill(orphan.taskId);
57
- await runtime.remove(orphan.taskId);
58
- }
59
- catch { }
60
- gateway.lockStore.releaseAll(reg.instanceId);
61
- await gateway.containerRegistry.unregister(oldSecret);
62
- killed++;
63
- continue;
64
- }
65
- const runner = pool.getAvailableRunner();
66
- if (!runner) {
67
- logger.warn({ agent: orphan.agentName, task: orphan.taskId }, "no available runner for orphan, killing");
68
- try {
69
- await runtime.kill(orphan.taskId);
70
- await runtime.remove(orphan.taskId);
71
- }
72
- catch { }
73
- gateway.lockStore.releaseAll(reg.instanceId);
74
- await gateway.containerRegistry.unregister(oldSecret);
75
- killed++;
76
- continue;
77
- }
78
- // Re-attach to the orphaned process so streamLogs/waitForExit work normally
79
- const reattach = runtime.reattach;
80
- if (typeof reattach === "function" && !reattach.call(runtime, orphan.taskId)) {
81
- logger.warn({ agent: orphan.agentName, task: orphan.taskId }, "failed to reattach orphan, killing");
82
- try {
83
- await runtime.kill(orphan.taskId);
84
- await runtime.remove(orphan.taskId);
85
- }
86
- catch { }
87
- gateway.lockStore.releaseAll(reg.instanceId);
88
- await gateway.containerRegistry.unregister(oldSecret);
89
- killed++;
90
- continue;
91
- }
92
- // Unregister old secret mapping — will be re-registered inside adoptContainer
93
- await gateway.containerRegistry.unregister(oldSecret);
94
- logger.info({ agent: orphan.agentName, task: orphan.taskId, instance: reg.instanceId }, "re-adopting orphan container");
95
- const containerRunner = runner;
96
- if (typeof containerRunner.adoptContainer === "function") {
97
- containerRunner
98
- .adoptContainer(orphan.taskId, shutdownSecret, reg.instanceId, { type: "schedule", source: "re-adopted" })
99
- .then(() => { if (schedulerState.schedulerCtx)
100
- drainQueues(schedulerState.schedulerCtx); })
101
- .catch((err) => logger.error({ err, agent: orphan.agentName }, "orphan re-adoption failed"));
102
- adopted++;
103
- }
104
- else {
105
- logger.warn({ agent: orphan.agentName }, "runner does not support adoption, killing orphan");
106
- try {
107
- await runtime.kill(orphan.taskId);
108
- await runtime.remove(orphan.taskId);
109
- }
110
- catch { }
111
- killed++;
112
- }
113
- }
114
- // Clean up registry entries for containers that exited while scheduler was down
115
- for (const reg of registeredContainers) {
116
- if (!runningNames.has(reg.containerName)) {
117
- const found = gateway.containerRegistry.findByContainerName(reg.containerName);
118
- if (found) {
119
- gateway.lockStore.releaseAll(reg.instanceId);
120
- await gateway.containerRegistry.unregister(found.secret);
121
- logger.info({ agent: reg.agentName, instance: reg.instanceId }, "cleaned up stale registration (container exited while scheduler was down)");
122
- }
123
- }
124
- }
125
- logger.info({ adopted, killed, total: orphans.length }, "orphan container handling complete");
126
- }
127
- else {
128
- // No running containers — clean up all stale registry entries
129
- const staleEntries = gateway.containerRegistry.listAll();
130
- if (staleEntries.length > 0) {
131
- let releasedLocks = 0;
132
- for (const entry of staleEntries) {
133
- releasedLocks += gateway.lockStore.releaseAll(entry.instanceId);
134
- }
135
- await gateway.containerRegistry.clear();
136
- logger.info({ releasedLocks, staleRegistrations: staleEntries.length }, "cleaned up stale registrations (no running containers)");
137
- }
138
- }
139
- }
140
- catch (err) {
141
- logger.debug({ err }, "orphan detection/re-adoption skipped (runtime does not support listing)");
142
- }
143
- }
144
- //# sourceMappingURL=orphan-recovery.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"orphan-recovery.js","sourceRoot":"","sources":["../../src/scheduler/orphan-recovery.ts"],"names":[],"mappings":"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"}
@@ -1,35 +0,0 @@
1
- #!/bin/sh
2
- # Shared HTTP status → exit code mapping for gateway-calling commands.
3
- # Source this file: . "$(dirname "$0")/_http-exit"
4
- # Then call: http_exit <http_code>
5
- #
6
- # Exit code table:
7
- # 0 = success (HTTP 200)
8
- # 1 = conflict (HTTP 409)
9
- # 2 = not found (HTTP 404)
10
- # 3 = auth error (HTTP 403)
11
- # 4 = bad request (HTTP 400) — server rejected the request
12
- # 5 = unavailable (HTTP 503) — gateway not ready
13
- # 6 = unreachable (curl 000) — connection failed / DNS error
14
- # 7 = unexpected (any other HTTP status)
15
- # 8 = timeout (used by al-wait; not mapped here)
16
- # 9 = usage error (missing argument — local check, never hit network)
17
- # 10 = bad gateway (HTTP 502) — proxy could not reach the gateway
18
- # 11 = gateway timeout (HTTP 504) — proxy timed out reaching the gateway
19
- # 12 = server error (HTTP 500) — internal gateway error
20
-
21
- http_exit() {
22
- case "$1" in
23
- 200) exit 0;;
24
- 409) exit 1;;
25
- 404) exit 2;;
26
- 403) exit 3;;
27
- 400) exit 4;;
28
- 503) exit 5;;
29
- 000) exit 6;;
30
- 502) exit 10;;
31
- 504) exit 11;;
32
- 500) exit 12;;
33
- *) exit 7;;
34
- esac
35
- }
@@ -1,4 +0,0 @@
1
- #!/bin/sh
2
- CODE="${1:-15}"
3
- printf '%s' "$CODE" > "$AL_SIGNAL_DIR/exit"
4
- echo '{"ok":true}'
@@ -1,50 +0,0 @@
1
- #!/bin/sh
2
-
3
- AL_EXPORT_FILE_PATH="${AL_EXPORT_FILE:-${AL_ENV_FILE:-/tmp/env.sh}}"
4
-
5
- ensure_export_file() {
6
- mkdir -p "$(dirname "$AL_EXPORT_FILE_PATH")"
7
- : >> "$AL_EXPORT_FILE_PATH"
8
- }
9
-
10
- if [ "$1" = "-f" ]; then
11
- ensure_export_file
12
- printf '%s\n' "$AL_EXPORT_FILE_PATH"
13
- exit 0
14
- fi
15
-
16
- if [ $# -lt 2 ]; then
17
- echo 'usage: al-export NAME value [NAME2 value2 ...] | al-export -f' >&2
18
- exit 1
19
- fi
20
-
21
- count=0
22
- ensure_export_file
23
-
24
- while [ $# -ge 1 ]; do
25
- if [ $# -lt 2 ]; then
26
- echo 'usage: al-export NAME value [NAME2 value2 ...] | al-export -f' >&2
27
- exit 1
28
- fi
29
-
30
- case "$1" in
31
- [!a-zA-Z_]* | *[!a-zA-Z0-9_]*)
32
- echo "al-export: invalid variable name: $1" >&2
33
- exit 1
34
- ;;
35
- esac
36
-
37
- name="$1"
38
- value="$2"
39
- shift 2
40
-
41
- escaped=$(printf '%s' "$value" | sed "s/'/'\\\\''/g")
42
- printf "export %s='%s'\n" "$name" "$escaped" >> "$AL_EXPORT_FILE_PATH"
43
- count=$((count + 1))
44
- done
45
-
46
- if [ "$count" -eq 1 ]; then
47
- echo "exported 1 variable"
48
- else
49
- echo "exported $count variables"
50
- fi
@@ -1,8 +0,0 @@
1
- #!/bin/sh
2
- touch "$AL_SIGNAL_DIR/rerun"
3
- if [ -n "$GATEWAY_URL" ] && [ -n "$SHUTDOWN_SECRET" ]; then
4
- curl -s -X POST "$GATEWAY_URL/signals/rerun" \
5
- -H 'Content-Type: application/json' \
6
- -d '{"secret":"'"$SHUTDOWN_SECRET"'"}' > /dev/null 2>&1 || true
7
- fi
8
- echo '{"ok":true}'
@@ -1,14 +0,0 @@
1
- #!/bin/sh
2
- if [ $# -gt 0 ]; then
3
- VALUE="$*"
4
- else
5
- VALUE=$(cat)
6
- fi
7
- printf '%s' "$VALUE" > "$AL_SIGNAL_DIR/return"
8
- if [ -n "$GATEWAY_URL" ] && [ -n "$SHUTDOWN_SECRET" ]; then
9
- PAYLOAD=$(printf '{"secret":"%s","value":%s}' "$SHUTDOWN_SECRET" "$(printf '%s' "$VALUE" | jq -Rs .)")
10
- curl -s -X POST "$GATEWAY_URL/signals/return" \
11
- -H 'Content-Type: application/json' \
12
- -d "$PAYLOAD" > /dev/null 2>&1 || true
13
- fi
14
- echo '{"ok":true}'
@@ -1,5 +0,0 @@
1
- #!/bin/sh
2
- if [ -z "$GATEWAY_URL" ]; then exit 0; fi
3
- curl -s -X POST "$GATEWAY_URL/shutdown" \
4
- -H 'Content-Type: application/json' \
5
- -d '{"secret":"'"$SHUTDOWN_SECRET"'","reason":"'"${1:-agent requested shutdown}"'"}' || true
@@ -1,9 +0,0 @@
1
- #!/bin/sh
2
- if [ -z "$1" ]; then echo '{"ok":false,"error":"usage: al-status \"<text>\""}'; exit 9; fi
3
- printf '%s' "$1" > "$AL_SIGNAL_DIR/status"
4
- if [ -n "$GATEWAY_URL" ] && [ -n "$SHUTDOWN_SECRET" ]; then
5
- curl -s -X POST "$GATEWAY_URL/signals/status" \
6
- -H 'Content-Type: application/json' \
7
- -d "$(printf '{"secret":"%s","text":"%s"}' "$SHUTDOWN_SECRET" "$1")" > /dev/null 2>&1 || true
8
- fi
9
- echo '{"ok":true}'
@@ -1,13 +0,0 @@
1
- #!/bin/sh
2
- # al-subagent — dispatch a call to another agent
3
- # Exit codes: 0=dispatched, 1=rejected, 3=auth, 4=bad request, 5=no gateway, 6=unreachable
4
- . "$(dirname "$0")/_http-exit"
5
- if [ -z "$GATEWAY_URL" ]; then echo '{"ok":false,"reason":"no gateway"}'; exit 5; fi
6
- if [ -z "$1" ]; then echo '{"ok":false,"reason":"usage: echo ctx | al-subagent <agent>"}'; exit 9; fi
7
- CONTEXT=$(cat)
8
- _raw=$(curl -s -w '\n%{http_code}' -X POST "$GATEWAY_URL/calls" \
9
- -H 'Content-Type: application/json' \
10
- -d '{"secret":"'"$SHUTDOWN_SECRET"'","targetAgent":"'"$1"'","context":"'"$CONTEXT"'"}')
11
- AL_HTTP_CODE=$(printf '%s' "$_raw" | tail -n1)
12
- printf '%s' "$_raw" | sed '$d'
13
- http_exit "$AL_HTTP_CODE"
@@ -1,10 +0,0 @@
1
- #!/bin/sh
2
- # al-subagent-check — check the status of a dispatched call
3
- # Exit codes: 0=found, 2=not found, 3=auth, 4=bad request, 5=no gateway, 6=unreachable
4
- . "$(dirname "$0")/_http-exit"
5
- if [ -z "$GATEWAY_URL" ]; then echo '{"status":"error","errorMessage":"no gateway"}'; exit 5; fi
6
- if [ -z "$1" ]; then echo '{"status":"error","errorMessage":"usage: al-subagent-check <callId>"}'; exit 9; fi
7
- _raw=$(curl -s -w '\n%{http_code}' "$GATEWAY_URL/calls/$1?secret=$SHUTDOWN_SECRET")
8
- AL_HTTP_CODE=$(printf '%s' "$_raw" | tail -n1)
9
- printf '%s' "$_raw" | sed '$d'
10
- http_exit "$AL_HTTP_CODE"
@@ -1,37 +0,0 @@
1
- #!/bin/sh
2
- # al-subagent-wait — wait for one or more calls to complete
3
- # Exit codes: 0=all complete, 4=bad request, 5=no gateway, 6=unreachable, 8=timeout
4
- . "$(dirname "$0")/_http-exit"
5
- if [ -z "$GATEWAY_URL" ]; then echo '{"error":"no gateway"}'; exit 5; fi
6
- TIMEOUT=900
7
- IDS=""
8
- while [ $# -gt 0 ]; do
9
- case "$1" in
10
- --timeout) TIMEOUT="$2"; shift 2;;
11
- *) IDS="$IDS $1"; shift;;
12
- esac
13
- done
14
- if [ -z "$IDS" ]; then echo '{"error":"usage: al-subagent-wait <callId> [callId...] [--timeout N]"}'; exit 9; fi
15
- ELAPSED=0
16
- while [ "$ELAPSED" -lt "$TIMEOUT" ]; do
17
- ALL_DONE=true
18
- for id in $IDS; do
19
- _raw=$(curl -s -w '\n%{http_code}' "$GATEWAY_URL/calls/$id?secret=$SHUTDOWN_SECRET")
20
- _code=$(printf '%s' "$_raw" | tail -n1)
21
- # On connection failure during polling, keep trying
22
- case "$_code" in 000) ALL_DONE=false; continue;; esac
23
- STATUS=$(printf '%s' "$_raw" | sed '$d' | sed -n 's/.*"status":"\([^"]*\)".*/\1/p')
24
- case "$STATUS" in running|pending) ALL_DONE=false;; esac
25
- done
26
- if $ALL_DONE; then break; fi
27
- sleep 5; ELAPSED=$((ELAPSED + 5))
28
- done
29
- RESULT="{"
30
- FIRST=true
31
- for id in $IDS; do
32
- $FIRST || RESULT="$RESULT,"
33
- FIRST=false
34
- RESULT="$RESULT\"$id\":$(curl -s "$GATEWAY_URL/calls/$id?secret=$SHUTDOWN_SECRET")"
35
- done
36
- echo "$RESULT}"
37
- if [ "$ELAPSED" -ge "$TIMEOUT" ]; then exit 8; fi
package/docker/bin/rlock DELETED
@@ -1,12 +0,0 @@
1
- #!/bin/sh
2
- # rlock — acquire an exclusive resource lock
3
- # Exit codes: 0=acquired, 1=conflict, 3=auth, 4=bad request, 6=unreachable, 9=usage, 10=bad gateway
4
- . "$(dirname "$0")/_http-exit"
5
- if [ -z "$GATEWAY_URL" ]; then echo '{"ok":true}'; exit 0; fi
6
- if [ -z "$1" ]; then echo '{"ok":false,"error":"usage: rlock <resourceKey>"}'; exit 9; fi
7
- _raw=$(curl -s --connect-timeout 5 --max-time 10 -w '\n%{http_code}' -X POST "$GATEWAY_URL/locks/acquire" \
8
- -H 'Content-Type: application/json' \
9
- -d '{"secret":"'"$SHUTDOWN_SECRET"'","resourceKey":"'"$1"'"}')
10
- AL_HTTP_CODE=$(printf '%s' "$_raw" | tail -n1)
11
- printf '%s' "$_raw" | sed '$d'
12
- http_exit "$AL_HTTP_CODE"
@@ -1,12 +0,0 @@
1
- #!/bin/sh
2
- # rlock-heartbeat — extend the TTL on a held lock
3
- # Exit codes: 0=extended, 1=conflict, 2=not found, 3=auth, 4=bad request, 6=unreachable, 9=usage
4
- . "$(dirname "$0")/_http-exit"
5
- if [ -z "$GATEWAY_URL" ]; then echo '{"ok":true}'; exit 0; fi
6
- if [ -z "$1" ]; then echo '{"ok":false,"error":"usage: rlock-heartbeat <resourceKey>"}'; exit 9; fi
7
- _raw=$(curl -s --connect-timeout 5 --max-time 10 -w '\n%{http_code}' -X POST "$GATEWAY_URL/locks/heartbeat" \
8
- -H 'Content-Type: application/json' \
9
- -d '{"secret":"'"$SHUTDOWN_SECRET"'","resourceKey":"'"$1"'"}')
10
- AL_HTTP_CODE=$(printf '%s' "$_raw" | tail -n1)
11
- printf '%s' "$_raw" | sed '$d'
12
- http_exit "$AL_HTTP_CODE"
@@ -1,12 +0,0 @@
1
- #!/bin/sh
2
- # runlock — release a resource lock
3
- # Exit codes: 0=released, 1=conflict, 2=not found, 3=auth, 4=bad request, 6=unreachable, 9=usage
4
- . "$(dirname "$0")/_http-exit"
5
- if [ -z "$GATEWAY_URL" ]; then echo '{"ok":true}'; exit 0; fi
6
- if [ -z "$1" ]; then echo '{"ok":false,"error":"usage: runlock <resourceKey>"}'; exit 9; fi
7
- _raw=$(curl -s --connect-timeout 5 --max-time 10 -w '\n%{http_code}' -X POST "$GATEWAY_URL/locks/release" \
8
- -H 'Content-Type: application/json' \
9
- -d '{"secret":"'"$SHUTDOWN_SECRET"'","resourceKey":"'"$1"'"}')
10
- AL_HTTP_CODE=$(printf '%s' "$_raw" | tail -n1)
11
- printf '%s' "$_raw" | sed '$d'
12
- http_exit "$AL_HTTP_CODE"