agent-relay 1.0.22 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (613) hide show
  1. package/README.md +1 -1
  2. package/dist/bridge/shadow-cli.d.ts +17 -0
  3. package/dist/bridge/shadow-cli.d.ts.map +1 -0
  4. package/dist/bridge/shadow-cli.js +75 -0
  5. package/dist/bridge/shadow-cli.js.map +1 -0
  6. package/dist/bridge/shadow-config.d.ts +87 -0
  7. package/dist/bridge/shadow-config.d.ts.map +1 -0
  8. package/dist/bridge/shadow-config.js +134 -0
  9. package/dist/bridge/shadow-config.js.map +1 -0
  10. package/dist/bridge/spawner.d.ts +68 -1
  11. package/dist/bridge/spawner.d.ts.map +1 -1
  12. package/dist/bridge/spawner.js +360 -16
  13. package/dist/bridge/spawner.js.map +1 -1
  14. package/dist/bridge/types.d.ts +67 -0
  15. package/dist/bridge/types.d.ts.map +1 -1
  16. package/dist/cli/index.js +1196 -15
  17. package/dist/cli/index.js.map +1 -1
  18. package/dist/cloud/api/auth.d.ts +20 -0
  19. package/dist/cloud/api/auth.d.ts.map +1 -0
  20. package/dist/cloud/api/auth.js +128 -0
  21. package/dist/cloud/api/auth.js.map +1 -0
  22. package/dist/cloud/api/billing.d.ts +17 -0
  23. package/dist/cloud/api/billing.d.ts.map +1 -0
  24. package/dist/cloud/api/billing.js +353 -0
  25. package/dist/cloud/api/billing.js.map +1 -0
  26. package/dist/cloud/api/cli-pty-runner.d.ts +54 -0
  27. package/dist/cloud/api/cli-pty-runner.d.ts.map +1 -0
  28. package/dist/cloud/api/cli-pty-runner.js +119 -0
  29. package/dist/cloud/api/cli-pty-runner.js.map +1 -0
  30. package/dist/cloud/api/coordinators.d.ts +8 -0
  31. package/dist/cloud/api/coordinators.d.ts.map +1 -0
  32. package/dist/cloud/api/coordinators.js +347 -0
  33. package/dist/cloud/api/coordinators.js.map +1 -0
  34. package/dist/cloud/api/daemons.d.ts +12 -0
  35. package/dist/cloud/api/daemons.d.ts.map +1 -0
  36. package/dist/cloud/api/daemons.js +320 -0
  37. package/dist/cloud/api/daemons.js.map +1 -0
  38. package/dist/cloud/api/generic-webhooks.d.ts +8 -0
  39. package/dist/cloud/api/generic-webhooks.d.ts.map +1 -0
  40. package/dist/cloud/api/generic-webhooks.js +129 -0
  41. package/dist/cloud/api/generic-webhooks.js.map +1 -0
  42. package/dist/cloud/api/git.d.ts +8 -0
  43. package/dist/cloud/api/git.d.ts.map +1 -0
  44. package/dist/cloud/api/git.js +131 -0
  45. package/dist/cloud/api/git.js.map +1 -0
  46. package/dist/cloud/api/github-app.d.ts +11 -0
  47. package/dist/cloud/api/github-app.d.ts.map +1 -0
  48. package/dist/cloud/api/github-app.js +189 -0
  49. package/dist/cloud/api/github-app.js.map +1 -0
  50. package/dist/cloud/api/middleware/planLimits.d.ts +43 -0
  51. package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
  52. package/dist/cloud/api/middleware/planLimits.js +202 -0
  53. package/dist/cloud/api/middleware/planLimits.js.map +1 -0
  54. package/dist/cloud/api/monitoring.d.ts +11 -0
  55. package/dist/cloud/api/monitoring.d.ts.map +1 -0
  56. package/dist/cloud/api/monitoring.js +578 -0
  57. package/dist/cloud/api/monitoring.js.map +1 -0
  58. package/dist/cloud/api/nango-auth.d.ts +9 -0
  59. package/dist/cloud/api/nango-auth.d.ts.map +1 -0
  60. package/dist/cloud/api/nango-auth.js +377 -0
  61. package/dist/cloud/api/nango-auth.js.map +1 -0
  62. package/dist/cloud/api/onboarding.d.ts +15 -0
  63. package/dist/cloud/api/onboarding.d.ts.map +1 -0
  64. package/dist/cloud/api/onboarding.js +588 -0
  65. package/dist/cloud/api/onboarding.js.map +1 -0
  66. package/dist/cloud/api/policy.d.ts +8 -0
  67. package/dist/cloud/api/policy.d.ts.map +1 -0
  68. package/dist/cloud/api/policy.js +229 -0
  69. package/dist/cloud/api/policy.js.map +1 -0
  70. package/dist/cloud/api/providers.d.ts +7 -0
  71. package/dist/cloud/api/providers.d.ts.map +1 -0
  72. package/dist/cloud/api/providers.js +507 -0
  73. package/dist/cloud/api/providers.js.map +1 -0
  74. package/dist/cloud/api/repos.d.ts +7 -0
  75. package/dist/cloud/api/repos.d.ts.map +1 -0
  76. package/dist/cloud/api/repos.js +314 -0
  77. package/dist/cloud/api/repos.js.map +1 -0
  78. package/dist/cloud/api/teams.d.ts +7 -0
  79. package/dist/cloud/api/teams.d.ts.map +1 -0
  80. package/dist/cloud/api/teams.js +279 -0
  81. package/dist/cloud/api/teams.js.map +1 -0
  82. package/dist/cloud/api/test-helpers.d.ts +10 -0
  83. package/dist/cloud/api/test-helpers.d.ts.map +1 -0
  84. package/dist/cloud/api/test-helpers.js +575 -0
  85. package/dist/cloud/api/test-helpers.js.map +1 -0
  86. package/dist/cloud/api/usage.d.ts +7 -0
  87. package/dist/cloud/api/usage.d.ts.map +1 -0
  88. package/dist/cloud/api/usage.js +98 -0
  89. package/dist/cloud/api/usage.js.map +1 -0
  90. package/dist/cloud/api/webhooks.d.ts +7 -0
  91. package/dist/cloud/api/webhooks.d.ts.map +1 -0
  92. package/dist/cloud/api/webhooks.js +496 -0
  93. package/dist/cloud/api/webhooks.js.map +1 -0
  94. package/dist/cloud/api/workspaces.d.ts +7 -0
  95. package/dist/cloud/api/workspaces.d.ts.map +1 -0
  96. package/dist/cloud/api/workspaces.js +727 -0
  97. package/dist/cloud/api/workspaces.js.map +1 -0
  98. package/dist/cloud/billing/index.d.ts +9 -0
  99. package/dist/cloud/billing/index.d.ts.map +1 -0
  100. package/dist/cloud/billing/index.js +9 -0
  101. package/dist/cloud/billing/index.js.map +1 -0
  102. package/dist/cloud/billing/plans.d.ts +39 -0
  103. package/dist/cloud/billing/plans.d.ts.map +1 -0
  104. package/dist/cloud/billing/plans.js +245 -0
  105. package/dist/cloud/billing/plans.js.map +1 -0
  106. package/dist/cloud/billing/service.d.ts +80 -0
  107. package/dist/cloud/billing/service.d.ts.map +1 -0
  108. package/dist/cloud/billing/service.js +388 -0
  109. package/dist/cloud/billing/service.js.map +1 -0
  110. package/dist/cloud/billing/types.d.ts +141 -0
  111. package/dist/cloud/billing/types.d.ts.map +1 -0
  112. package/dist/cloud/billing/types.js +7 -0
  113. package/dist/cloud/billing/types.js.map +1 -0
  114. package/dist/cloud/config.d.ts +66 -0
  115. package/dist/cloud/config.d.ts.map +1 -0
  116. package/dist/cloud/config.js +92 -0
  117. package/dist/cloud/config.js.map +1 -0
  118. package/dist/cloud/db/drizzle.d.ts +215 -0
  119. package/dist/cloud/db/drizzle.d.ts.map +1 -0
  120. package/dist/cloud/db/drizzle.js +1083 -0
  121. package/dist/cloud/db/drizzle.js.map +1 -0
  122. package/dist/cloud/db/index.d.ts +35 -0
  123. package/dist/cloud/db/index.d.ts.map +1 -0
  124. package/dist/cloud/db/index.js +52 -0
  125. package/dist/cloud/db/index.js.map +1 -0
  126. package/dist/cloud/db/schema.d.ts +4519 -0
  127. package/dist/cloud/db/schema.d.ts.map +1 -0
  128. package/dist/cloud/db/schema.js +547 -0
  129. package/dist/cloud/db/schema.js.map +1 -0
  130. package/dist/cloud/index.d.ts +12 -0
  131. package/dist/cloud/index.d.ts.map +1 -0
  132. package/dist/cloud/index.js +39 -0
  133. package/dist/cloud/index.js.map +1 -0
  134. package/dist/cloud/provisioner/index.d.ts +75 -0
  135. package/dist/cloud/provisioner/index.d.ts.map +1 -0
  136. package/dist/cloud/provisioner/index.js +977 -0
  137. package/dist/cloud/provisioner/index.js.map +1 -0
  138. package/dist/cloud/server.d.ts +17 -0
  139. package/dist/cloud/server.d.ts.map +1 -0
  140. package/dist/cloud/server.js +534 -0
  141. package/dist/cloud/server.js.map +1 -0
  142. package/dist/cloud/services/auto-scaler.d.ts +152 -0
  143. package/dist/cloud/services/auto-scaler.d.ts.map +1 -0
  144. package/dist/cloud/services/auto-scaler.js +439 -0
  145. package/dist/cloud/services/auto-scaler.js.map +1 -0
  146. package/dist/cloud/services/capacity-manager.d.ts +148 -0
  147. package/dist/cloud/services/capacity-manager.d.ts.map +1 -0
  148. package/dist/cloud/services/capacity-manager.js +449 -0
  149. package/dist/cloud/services/capacity-manager.js.map +1 -0
  150. package/dist/cloud/services/ci-agent-spawner.d.ts +49 -0
  151. package/dist/cloud/services/ci-agent-spawner.d.ts.map +1 -0
  152. package/dist/cloud/services/ci-agent-spawner.js +373 -0
  153. package/dist/cloud/services/ci-agent-spawner.js.map +1 -0
  154. package/dist/cloud/services/coordinator.d.ts +62 -0
  155. package/dist/cloud/services/coordinator.d.ts.map +1 -0
  156. package/dist/cloud/services/coordinator.js +389 -0
  157. package/dist/cloud/services/coordinator.js.map +1 -0
  158. package/dist/cloud/services/index.d.ts +12 -0
  159. package/dist/cloud/services/index.d.ts.map +1 -0
  160. package/dist/cloud/services/index.js +15 -0
  161. package/dist/cloud/services/index.js.map +1 -0
  162. package/dist/cloud/services/mention-handler.d.ts +65 -0
  163. package/dist/cloud/services/mention-handler.d.ts.map +1 -0
  164. package/dist/cloud/services/mention-handler.js +405 -0
  165. package/dist/cloud/services/mention-handler.js.map +1 -0
  166. package/dist/cloud/services/nango.d.ts +126 -0
  167. package/dist/cloud/services/nango.d.ts.map +1 -0
  168. package/dist/cloud/services/nango.js +191 -0
  169. package/dist/cloud/services/nango.js.map +1 -0
  170. package/dist/cloud/services/persistence.d.ts +131 -0
  171. package/dist/cloud/services/persistence.d.ts.map +1 -0
  172. package/dist/cloud/services/persistence.js +200 -0
  173. package/dist/cloud/services/persistence.js.map +1 -0
  174. package/dist/cloud/services/planLimits.d.ts +125 -0
  175. package/dist/cloud/services/planLimits.d.ts.map +1 -0
  176. package/dist/cloud/services/planLimits.js +282 -0
  177. package/dist/cloud/services/planLimits.js.map +1 -0
  178. package/dist/cloud/services/scaling-orchestrator.d.ts +159 -0
  179. package/dist/cloud/services/scaling-orchestrator.d.ts.map +1 -0
  180. package/dist/cloud/services/scaling-orchestrator.js +502 -0
  181. package/dist/cloud/services/scaling-orchestrator.js.map +1 -0
  182. package/dist/cloud/services/scaling-policy.d.ts +121 -0
  183. package/dist/cloud/services/scaling-policy.d.ts.map +1 -0
  184. package/dist/cloud/services/scaling-policy.js +415 -0
  185. package/dist/cloud/services/scaling-policy.js.map +1 -0
  186. package/dist/cloud/vault/index.d.ts +76 -0
  187. package/dist/cloud/vault/index.d.ts.map +1 -0
  188. package/dist/cloud/vault/index.js +219 -0
  189. package/dist/cloud/vault/index.js.map +1 -0
  190. package/dist/cloud/webhooks/index.d.ts +24 -0
  191. package/dist/cloud/webhooks/index.d.ts.map +1 -0
  192. package/dist/cloud/webhooks/index.js +29 -0
  193. package/dist/cloud/webhooks/index.js.map +1 -0
  194. package/dist/cloud/webhooks/parsers/github.d.ts +8 -0
  195. package/dist/cloud/webhooks/parsers/github.d.ts.map +1 -0
  196. package/dist/cloud/webhooks/parsers/github.js +234 -0
  197. package/dist/cloud/webhooks/parsers/github.js.map +1 -0
  198. package/dist/cloud/webhooks/parsers/index.d.ts +23 -0
  199. package/dist/cloud/webhooks/parsers/index.d.ts.map +1 -0
  200. package/dist/cloud/webhooks/parsers/index.js +30 -0
  201. package/dist/cloud/webhooks/parsers/index.js.map +1 -0
  202. package/dist/cloud/webhooks/parsers/linear.d.ts +9 -0
  203. package/dist/cloud/webhooks/parsers/linear.d.ts.map +1 -0
  204. package/dist/cloud/webhooks/parsers/linear.js +258 -0
  205. package/dist/cloud/webhooks/parsers/linear.js.map +1 -0
  206. package/dist/cloud/webhooks/parsers/slack.d.ts +9 -0
  207. package/dist/cloud/webhooks/parsers/slack.d.ts.map +1 -0
  208. package/dist/cloud/webhooks/parsers/slack.js +214 -0
  209. package/dist/cloud/webhooks/parsers/slack.js.map +1 -0
  210. package/dist/cloud/webhooks/responders/github.d.ts +8 -0
  211. package/dist/cloud/webhooks/responders/github.d.ts.map +1 -0
  212. package/dist/cloud/webhooks/responders/github.js +73 -0
  213. package/dist/cloud/webhooks/responders/github.js.map +1 -0
  214. package/dist/cloud/webhooks/responders/index.d.ts +23 -0
  215. package/dist/cloud/webhooks/responders/index.d.ts.map +1 -0
  216. package/dist/cloud/webhooks/responders/index.js +30 -0
  217. package/dist/cloud/webhooks/responders/index.js.map +1 -0
  218. package/dist/cloud/webhooks/responders/linear.d.ts +9 -0
  219. package/dist/cloud/webhooks/responders/linear.d.ts.map +1 -0
  220. package/dist/cloud/webhooks/responders/linear.js +149 -0
  221. package/dist/cloud/webhooks/responders/linear.js.map +1 -0
  222. package/dist/cloud/webhooks/responders/slack.d.ts +20 -0
  223. package/dist/cloud/webhooks/responders/slack.d.ts.map +1 -0
  224. package/dist/cloud/webhooks/responders/slack.js +178 -0
  225. package/dist/cloud/webhooks/responders/slack.js.map +1 -0
  226. package/dist/cloud/webhooks/router.d.ts +25 -0
  227. package/dist/cloud/webhooks/router.d.ts.map +1 -0
  228. package/dist/cloud/webhooks/router.js +504 -0
  229. package/dist/cloud/webhooks/router.js.map +1 -0
  230. package/dist/cloud/webhooks/rules-engine.d.ts +24 -0
  231. package/dist/cloud/webhooks/rules-engine.d.ts.map +1 -0
  232. package/dist/cloud/webhooks/rules-engine.js +287 -0
  233. package/dist/cloud/webhooks/rules-engine.js.map +1 -0
  234. package/dist/cloud/webhooks/types.d.ts +186 -0
  235. package/dist/cloud/webhooks/types.d.ts.map +1 -0
  236. package/dist/cloud/webhooks/types.js +8 -0
  237. package/dist/cloud/webhooks/types.js.map +1 -0
  238. package/dist/continuity/formatter.d.ts +51 -0
  239. package/dist/continuity/formatter.d.ts.map +1 -0
  240. package/dist/continuity/formatter.js +313 -0
  241. package/dist/continuity/formatter.js.map +1 -0
  242. package/dist/continuity/handoff-store.d.ts +67 -0
  243. package/dist/continuity/handoff-store.d.ts.map +1 -0
  244. package/dist/continuity/handoff-store.js +472 -0
  245. package/dist/continuity/handoff-store.js.map +1 -0
  246. package/dist/continuity/index.d.ts +45 -0
  247. package/dist/continuity/index.d.ts.map +1 -0
  248. package/dist/continuity/index.js +48 -0
  249. package/dist/continuity/index.js.map +1 -0
  250. package/dist/continuity/ledger-store.d.ts +110 -0
  251. package/dist/continuity/ledger-store.d.ts.map +1 -0
  252. package/dist/continuity/ledger-store.js +500 -0
  253. package/dist/continuity/ledger-store.js.map +1 -0
  254. package/dist/continuity/manager.d.ts +178 -0
  255. package/dist/continuity/manager.d.ts.map +1 -0
  256. package/dist/continuity/manager.js +562 -0
  257. package/dist/continuity/manager.js.map +1 -0
  258. package/dist/continuity/parser.d.ts +76 -0
  259. package/dist/continuity/parser.d.ts.map +1 -0
  260. package/dist/continuity/parser.js +579 -0
  261. package/dist/continuity/parser.js.map +1 -0
  262. package/dist/continuity/types.d.ts +180 -0
  263. package/dist/continuity/types.d.ts.map +1 -0
  264. package/dist/continuity/types.js +9 -0
  265. package/dist/continuity/types.js.map +1 -0
  266. package/dist/daemon/agent-manager.d.ts +114 -0
  267. package/dist/daemon/agent-manager.d.ts.map +1 -0
  268. package/dist/daemon/agent-manager.js +513 -0
  269. package/dist/daemon/agent-manager.js.map +1 -0
  270. package/dist/daemon/agent-registry.d.ts +34 -0
  271. package/dist/daemon/agent-registry.d.ts.map +1 -1
  272. package/dist/daemon/agent-registry.js +45 -2
  273. package/dist/daemon/agent-registry.js.map +1 -1
  274. package/dist/daemon/api.d.ts +81 -0
  275. package/dist/daemon/api.d.ts.map +1 -0
  276. package/dist/daemon/api.js +554 -0
  277. package/dist/daemon/api.js.map +1 -0
  278. package/dist/daemon/cli-auth.d.ts +67 -0
  279. package/dist/daemon/cli-auth.d.ts.map +1 -0
  280. package/dist/daemon/cli-auth.js +537 -0
  281. package/dist/daemon/cli-auth.js.map +1 -0
  282. package/dist/daemon/cloud-sync.d.ts +101 -0
  283. package/dist/daemon/cloud-sync.d.ts.map +1 -0
  284. package/dist/daemon/cloud-sync.js +263 -0
  285. package/dist/daemon/cloud-sync.js.map +1 -0
  286. package/dist/daemon/index.d.ts +4 -0
  287. package/dist/daemon/index.d.ts.map +1 -1
  288. package/dist/daemon/index.js +6 -0
  289. package/dist/daemon/index.js.map +1 -1
  290. package/dist/daemon/orchestrator.d.ts +155 -0
  291. package/dist/daemon/orchestrator.d.ts.map +1 -0
  292. package/dist/daemon/orchestrator.js +766 -0
  293. package/dist/daemon/orchestrator.js.map +1 -0
  294. package/dist/daemon/router.d.ts +29 -0
  295. package/dist/daemon/router.d.ts.map +1 -1
  296. package/dist/daemon/router.js +143 -21
  297. package/dist/daemon/router.js.map +1 -1
  298. package/dist/daemon/server.d.ts +42 -0
  299. package/dist/daemon/server.d.ts.map +1 -1
  300. package/dist/daemon/server.js +199 -16
  301. package/dist/daemon/server.js.map +1 -1
  302. package/dist/daemon/services/browser-testing.d.ts +88 -0
  303. package/dist/daemon/services/browser-testing.d.ts.map +1 -0
  304. package/dist/daemon/services/browser-testing.js +244 -0
  305. package/dist/daemon/services/browser-testing.js.map +1 -0
  306. package/dist/daemon/services/container-spawner.d.ts +135 -0
  307. package/dist/daemon/services/container-spawner.d.ts.map +1 -0
  308. package/dist/daemon/services/container-spawner.js +313 -0
  309. package/dist/daemon/services/container-spawner.js.map +1 -0
  310. package/dist/daemon/types.d.ts +131 -0
  311. package/dist/daemon/types.d.ts.map +1 -0
  312. package/dist/daemon/types.js +6 -0
  313. package/dist/daemon/types.js.map +1 -0
  314. package/dist/daemon/workspace-manager.d.ts +75 -0
  315. package/dist/daemon/workspace-manager.d.ts.map +1 -0
  316. package/dist/daemon/workspace-manager.js +289 -0
  317. package/dist/daemon/workspace-manager.js.map +1 -0
  318. package/dist/dashboard/out/404.html +1 -1
  319. package/dist/dashboard/out/_next/static/chunks/116-2502180def231162.js +1 -0
  320. package/dist/dashboard/out/_next/static/chunks/282-980c2eb8fff20123.js +1 -0
  321. package/dist/dashboard/out/_next/static/chunks/480-2d4111711d4e473c.js +1 -0
  322. package/dist/dashboard/out/_next/static/chunks/724-73c1ee5f60abe860.js +9 -0
  323. package/dist/dashboard/out/_next/static/chunks/766-c3a14283c88d815b.js +1 -0
  324. package/dist/dashboard/out/_next/static/chunks/app/app/page-7120be68bea622f3.js +1 -0
  325. package/dist/dashboard/out/_next/static/chunks/app/connect-repos/page-dc2e3a1a22478efc.js +1 -0
  326. package/dist/dashboard/out/_next/static/chunks/app/history/page-56a8b4616a90dc43.js +1 -0
  327. package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
  328. package/dist/dashboard/out/_next/static/chunks/app/login/page-3eac37ea6f5dd153.js +1 -0
  329. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-1081dd190a331a91.js +1 -0
  330. package/dist/dashboard/out/_next/static/chunks/app/page-daf87e86f783f980.js +1 -0
  331. package/dist/dashboard/out/_next/static/chunks/app/pricing/page-4d72d5a5d8a9b618.js +1 -0
  332. package/dist/dashboard/out/_next/static/chunks/app/providers/page-b68a681526eb145e.js +1 -0
  333. package/dist/dashboard/out/_next/static/chunks/app/signup/page-fee4ed1709070bcd.js +1 -0
  334. package/dist/dashboard/out/_next/static/chunks/e868780c-48e5f147c90a3a41.js +18 -0
  335. package/dist/dashboard/out/_next/static/chunks/{main-e0a1f53fe0617a63.js → main-97850e03d723ea8c.js} +1 -1
  336. package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
  337. package/dist/dashboard/out/_next/static/chunks/webpack-1cdd8ed57114d5e1.js +1 -0
  338. package/dist/dashboard/out/_next/static/css/29852f26181969a0.css +1 -0
  339. package/dist/dashboard/out/_next/static/css/411ce23ffeae9f76.css +1 -0
  340. package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
  341. package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
  342. package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
  343. package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
  344. package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
  345. package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
  346. package/dist/dashboard/out/alt-logos/logo.svg +38 -0
  347. package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
  348. package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
  349. package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
  350. package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
  351. package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
  352. package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
  353. package/dist/dashboard/out/app.html +1 -0
  354. package/dist/dashboard/out/app.txt +7 -0
  355. package/dist/dashboard/out/connect-repos.html +1 -0
  356. package/dist/dashboard/out/connect-repos.txt +7 -0
  357. package/dist/dashboard/out/history.html +1 -0
  358. package/dist/dashboard/out/history.txt +7 -0
  359. package/dist/dashboard/out/index.html +1 -1
  360. package/dist/dashboard/out/index.txt +2 -2
  361. package/dist/dashboard/out/login.html +6 -0
  362. package/dist/dashboard/out/login.txt +7 -0
  363. package/dist/dashboard/out/metrics.html +1 -515
  364. package/dist/dashboard/out/metrics.txt +2 -2
  365. package/dist/dashboard/out/pricing.html +13 -0
  366. package/dist/dashboard/out/pricing.txt +7 -0
  367. package/dist/dashboard/out/providers.html +1 -0
  368. package/dist/dashboard/out/providers.txt +7 -0
  369. package/dist/dashboard/out/signup.html +6 -0
  370. package/dist/dashboard/out/signup.txt +7 -0
  371. package/dist/dashboard-server/metrics.d.ts.map +1 -1
  372. package/dist/dashboard-server/metrics.js +3 -2
  373. package/dist/dashboard-server/metrics.js.map +1 -1
  374. package/dist/dashboard-server/server.d.ts.map +1 -1
  375. package/dist/dashboard-server/server.js +2653 -130
  376. package/dist/dashboard-server/server.js.map +1 -1
  377. package/dist/hooks/emitter.d.ts +40 -0
  378. package/dist/hooks/emitter.d.ts.map +1 -0
  379. package/dist/hooks/emitter.js +63 -0
  380. package/dist/hooks/emitter.js.map +1 -0
  381. package/dist/hooks/index.d.ts +3 -0
  382. package/dist/hooks/index.d.ts.map +1 -1
  383. package/dist/hooks/index.js +3 -0
  384. package/dist/hooks/index.js.map +1 -1
  385. package/dist/hooks/registry.d.ts +173 -0
  386. package/dist/hooks/registry.d.ts.map +1 -0
  387. package/dist/hooks/registry.js +476 -0
  388. package/dist/hooks/registry.js.map +1 -0
  389. package/dist/hooks/trajectory-hooks.d.ts +52 -0
  390. package/dist/hooks/trajectory-hooks.d.ts.map +1 -0
  391. package/dist/hooks/trajectory-hooks.js +183 -0
  392. package/dist/hooks/trajectory-hooks.js.map +1 -0
  393. package/dist/hooks/types.d.ts +141 -0
  394. package/dist/hooks/types.d.ts.map +1 -1
  395. package/dist/index.d.ts +2 -0
  396. package/dist/index.d.ts.map +1 -1
  397. package/dist/index.js +3 -0
  398. package/dist/index.js.map +1 -1
  399. package/dist/memory/adapters/index.d.ts +8 -0
  400. package/dist/memory/adapters/index.d.ts.map +1 -0
  401. package/dist/memory/adapters/index.js +8 -0
  402. package/dist/memory/adapters/index.js.map +1 -0
  403. package/dist/memory/adapters/inmemory.d.ts +59 -0
  404. package/dist/memory/adapters/inmemory.d.ts.map +1 -0
  405. package/dist/memory/adapters/inmemory.js +195 -0
  406. package/dist/memory/adapters/inmemory.js.map +1 -0
  407. package/dist/memory/adapters/supermemory.d.ts +71 -0
  408. package/dist/memory/adapters/supermemory.d.ts.map +1 -0
  409. package/dist/memory/adapters/supermemory.js +338 -0
  410. package/dist/memory/adapters/supermemory.js.map +1 -0
  411. package/dist/memory/factory.d.ts +48 -0
  412. package/dist/memory/factory.d.ts.map +1 -0
  413. package/dist/memory/factory.js +143 -0
  414. package/dist/memory/factory.js.map +1 -0
  415. package/dist/memory/index.d.ts +32 -0
  416. package/dist/memory/index.d.ts.map +1 -0
  417. package/dist/memory/index.js +32 -0
  418. package/dist/memory/index.js.map +1 -0
  419. package/dist/memory/memory-hooks.d.ts +60 -0
  420. package/dist/memory/memory-hooks.d.ts.map +1 -0
  421. package/dist/memory/memory-hooks.js +313 -0
  422. package/dist/memory/memory-hooks.js.map +1 -0
  423. package/dist/memory/service.d.ts +49 -0
  424. package/dist/memory/service.d.ts.map +1 -0
  425. package/dist/memory/service.js +146 -0
  426. package/dist/memory/service.js.map +1 -0
  427. package/dist/memory/types.d.ts +195 -0
  428. package/dist/memory/types.d.ts.map +1 -0
  429. package/dist/memory/types.js +8 -0
  430. package/dist/memory/types.js.map +1 -0
  431. package/dist/policy/agent-policy.d.ts +225 -0
  432. package/dist/policy/agent-policy.d.ts.map +1 -0
  433. package/dist/policy/agent-policy.js +665 -0
  434. package/dist/policy/agent-policy.js.map +1 -0
  435. package/dist/policy/cloud-policy-fetcher.d.ts +12 -0
  436. package/dist/policy/cloud-policy-fetcher.d.ts.map +1 -0
  437. package/dist/policy/cloud-policy-fetcher.js +64 -0
  438. package/dist/policy/cloud-policy-fetcher.js.map +1 -0
  439. package/dist/protocol/types.d.ts +10 -1
  440. package/dist/protocol/types.d.ts.map +1 -1
  441. package/dist/resiliency/context-persistence.d.ts +140 -0
  442. package/dist/resiliency/context-persistence.d.ts.map +1 -0
  443. package/dist/resiliency/context-persistence.js +397 -0
  444. package/dist/resiliency/context-persistence.js.map +1 -0
  445. package/dist/resiliency/crash-insights.d.ts +156 -0
  446. package/dist/resiliency/crash-insights.d.ts.map +1 -0
  447. package/dist/resiliency/crash-insights.js +492 -0
  448. package/dist/resiliency/crash-insights.js.map +1 -0
  449. package/dist/resiliency/gossip-health.d.ts +137 -0
  450. package/dist/resiliency/gossip-health.d.ts.map +1 -0
  451. package/dist/resiliency/gossip-health.js +241 -0
  452. package/dist/resiliency/gossip-health.js.map +1 -0
  453. package/dist/resiliency/health-monitor.d.ts +97 -0
  454. package/dist/resiliency/health-monitor.d.ts.map +1 -0
  455. package/dist/resiliency/health-monitor.js +291 -0
  456. package/dist/resiliency/health-monitor.js.map +1 -0
  457. package/dist/resiliency/index.d.ts +68 -0
  458. package/dist/resiliency/index.d.ts.map +1 -0
  459. package/dist/resiliency/index.js +68 -0
  460. package/dist/resiliency/index.js.map +1 -0
  461. package/dist/resiliency/leader-watchdog.d.ts +109 -0
  462. package/dist/resiliency/leader-watchdog.d.ts.map +1 -0
  463. package/dist/resiliency/leader-watchdog.js +189 -0
  464. package/dist/resiliency/leader-watchdog.js.map +1 -0
  465. package/dist/resiliency/logger.d.ts +114 -0
  466. package/dist/resiliency/logger.d.ts.map +1 -0
  467. package/dist/resiliency/logger.js +250 -0
  468. package/dist/resiliency/logger.js.map +1 -0
  469. package/dist/resiliency/memory-monitor.d.ts +172 -0
  470. package/dist/resiliency/memory-monitor.d.ts.map +1 -0
  471. package/dist/resiliency/memory-monitor.js +593 -0
  472. package/dist/resiliency/memory-monitor.js.map +1 -0
  473. package/dist/resiliency/metrics.d.ts +115 -0
  474. package/dist/resiliency/metrics.d.ts.map +1 -0
  475. package/dist/resiliency/metrics.js +239 -0
  476. package/dist/resiliency/metrics.js.map +1 -0
  477. package/dist/resiliency/provider-context.d.ts +100 -0
  478. package/dist/resiliency/provider-context.d.ts.map +1 -0
  479. package/dist/resiliency/provider-context.js +360 -0
  480. package/dist/resiliency/provider-context.js.map +1 -0
  481. package/dist/resiliency/stateless-lead.d.ts +149 -0
  482. package/dist/resiliency/stateless-lead.d.ts.map +1 -0
  483. package/dist/resiliency/stateless-lead.js +308 -0
  484. package/dist/resiliency/stateless-lead.js.map +1 -0
  485. package/dist/resiliency/supervisor.d.ts +147 -0
  486. package/dist/resiliency/supervisor.d.ts.map +1 -0
  487. package/dist/resiliency/supervisor.js +459 -0
  488. package/dist/resiliency/supervisor.js.map +1 -0
  489. package/dist/shared/cli-auth-config.d.ts +91 -0
  490. package/dist/shared/cli-auth-config.d.ts.map +1 -0
  491. package/dist/shared/cli-auth-config.js +264 -0
  492. package/dist/shared/cli-auth-config.js.map +1 -0
  493. package/dist/storage/adapter.d.ts +3 -1
  494. package/dist/storage/adapter.d.ts.map +1 -1
  495. package/dist/storage/adapter.js +12 -2
  496. package/dist/storage/adapter.js.map +1 -1
  497. package/dist/storage/sqlite-adapter.d.ts.map +1 -1
  498. package/dist/storage/sqlite-adapter.js +18 -14
  499. package/dist/storage/sqlite-adapter.js.map +1 -1
  500. package/dist/trajectory/config.d.ts +84 -0
  501. package/dist/trajectory/config.d.ts.map +1 -0
  502. package/dist/trajectory/config.js +163 -0
  503. package/dist/trajectory/config.js.map +1 -0
  504. package/dist/trajectory/index.d.ts +8 -0
  505. package/dist/trajectory/index.d.ts.map +1 -0
  506. package/dist/trajectory/index.js +8 -0
  507. package/dist/trajectory/index.js.map +1 -0
  508. package/dist/trajectory/integration.d.ts +292 -0
  509. package/dist/trajectory/integration.d.ts.map +1 -0
  510. package/dist/trajectory/integration.js +834 -0
  511. package/dist/trajectory/integration.js.map +1 -0
  512. package/dist/utils/index.d.ts +1 -0
  513. package/dist/utils/index.d.ts.map +1 -1
  514. package/dist/utils/index.js +1 -0
  515. package/dist/utils/index.js.map +1 -1
  516. package/dist/utils/logger.d.ts +40 -0
  517. package/dist/utils/logger.d.ts.map +1 -0
  518. package/dist/utils/logger.js +84 -0
  519. package/dist/utils/logger.js.map +1 -0
  520. package/dist/utils/project-namespace.d.ts +24 -0
  521. package/dist/utils/project-namespace.d.ts.map +1 -1
  522. package/dist/utils/project-namespace.js +84 -0
  523. package/dist/utils/project-namespace.js.map +1 -1
  524. package/dist/wrapper/client.d.ts +16 -1
  525. package/dist/wrapper/client.d.ts.map +1 -1
  526. package/dist/wrapper/client.js +32 -1
  527. package/dist/wrapper/client.js.map +1 -1
  528. package/dist/wrapper/parser.d.ts +13 -0
  529. package/dist/wrapper/parser.d.ts.map +1 -1
  530. package/dist/wrapper/parser.js +217 -47
  531. package/dist/wrapper/parser.js.map +1 -1
  532. package/dist/wrapper/pty-wrapper.d.ts +219 -17
  533. package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
  534. package/dist/wrapper/pty-wrapper.js +1050 -104
  535. package/dist/wrapper/pty-wrapper.js.map +1 -1
  536. package/dist/wrapper/shared.d.ts +165 -0
  537. package/dist/wrapper/shared.d.ts.map +1 -0
  538. package/dist/wrapper/shared.js +270 -0
  539. package/dist/wrapper/shared.js.map +1 -0
  540. package/dist/wrapper/tmux-wrapper.d.ts +78 -11
  541. package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
  542. package/dist/wrapper/tmux-wrapper.js +567 -106
  543. package/dist/wrapper/tmux-wrapper.js.map +1 -1
  544. package/docs/CLOUD-ARCHITECTURE.md +804 -0
  545. package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -0
  546. package/docs/HOOKS_API.md +394 -0
  547. package/docs/WRAPPER_EVENTS.md +358 -0
  548. package/docs/agent-policy-snippet.md +40 -0
  549. package/docs/agent-relay-protocol.md +238 -0
  550. package/docs/agent-relay-snippet.md +115 -6
  551. package/docs/archive/EXECUTIVE_SUMMARY.md +358 -0
  552. package/docs/archive/ROADMAP.md +329 -0
  553. package/docs/archive/TESTING_PRESENCE_FEATURES.md +327 -0
  554. package/docs/competitive/GASTOWN.md +451 -0
  555. package/docs/{COMPETITIVE_ANALYSIS.md → competitive/OVERVIEW.md} +1 -0
  556. package/docs/competitive/README.md +34 -0
  557. package/docs/competitive/TMUX_ORCHESTRATOR.md +605 -0
  558. package/docs/dashboard.png +0 -0
  559. package/docs/design/ci-failure-webhooks.md +812 -0
  560. package/docs/design/comprehensive-integrations.md +238 -0
  561. package/docs/design/e2b-sandbox-integration.md +504 -0
  562. package/docs/design/github-app-permissions.md +264 -0
  563. package/docs/guides/CLOUD.md +236 -0
  564. package/docs/guides/LOCAL.md +535 -0
  565. package/docs/guides/SELF-HOSTED.md +494 -0
  566. package/docs/local-testing.md +428 -0
  567. package/docs/proposals/continuous-claude-integration.md +622 -0
  568. package/docs/proposals/custom-commands.md +368 -0
  569. package/docs/proposals/shadow-as-subagent.md +765 -0
  570. package/docs/proposals/slack-bot-integration.md +1457 -0
  571. package/docs/tasks/global-skills-system.tasks.md +230 -0
  572. package/docs/tasks/webhook-integrations.tasks.md +184 -0
  573. package/docs/tasks/workspace-capabilities.tasks.md +121 -0
  574. package/docs/testing/RESILIENCY-TEST-PLAN-2026-01-01.md +366 -0
  575. package/package.json +45 -7
  576. package/scripts/cloud-setup.sh +96 -0
  577. package/scripts/manual-qa.sh +293 -0
  578. package/scripts/postinstall.js +60 -0
  579. package/scripts/run-cloud-qa.sh +220 -0
  580. package/scripts/test-cli-auth/Dockerfile +44 -0
  581. package/scripts/test-cli-auth/Dockerfile.real +79 -0
  582. package/scripts/test-cli-auth/README.md +286 -0
  583. package/scripts/test-cli-auth/ci-test-real-clis.ts +251 -0
  584. package/scripts/test-cli-auth/ci-test-runner.ts +263 -0
  585. package/scripts/test-cli-auth/mock-cli.sh +147 -0
  586. package/scripts/test-cli-auth/package.json +14 -0
  587. package/scripts/test-cli-auth/test-oauth-flow.ts +220 -0
  588. package/scripts/test-pty-input-auto.js +222 -0
  589. package/scripts/test-pty-input.js +150 -0
  590. package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +0 -1
  591. package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
  592. package/dist/dashboard/out/_next/static/chunks/app/page-4498be09a5157759.js +0 -1
  593. package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
  594. package/dist/dashboard/out/_next/static/chunks/webpack-c81f7fd28659d64f.js +0 -1
  595. package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
  596. /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_buildManifest.js +0 -0
  597. /package/dist/dashboard/out/_next/static/{DXFA-jj8wb3PcY5DX2xcU → H5aWG0udPB4iOUIl_gytz}/_ssgManifest.js +0 -0
  598. /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b100311aff8d5c61.js} +0 -0
  599. /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-a13d3c2b1be45466.js} +0 -0
  600. /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-a4973f3e3c82fb67.js} +0 -0
  601. /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.js} +0 -0
  602. /package/docs/{CHANGELOG.md → archive/CHANGELOG.md} +0 -0
  603. /package/docs/{CLI-SIMPLIFICATION-COMPLETE.md → archive/CLI-SIMPLIFICATION-COMPLETE.md} +0 -0
  604. /package/docs/{DESIGN_BRIDGE_STAFFING.md → archive/DESIGN_BRIDGE_STAFFING.md} +0 -0
  605. /package/docs/{DESIGN_V2.md → archive/DESIGN_V2.md} +0 -0
  606. /package/docs/{MONETIZATION.md → archive/MONETIZATION.md} +0 -0
  607. /package/docs/{PROPOSAL-trajectories.md → archive/PROPOSAL-trajectories.md} +0 -0
  608. /package/docs/{SCALING_ANALYSIS.md → archive/SCALING_ANALYSIS.md} +0 -0
  609. /package/docs/{TMUX_IMPLEMENTATION_NOTES.md → archive/TMUX_IMPLEMENTATION_NOTES.md} +0 -0
  610. /package/docs/{TMUX_IMPROVEMENTS.md → archive/TMUX_IMPROVEMENTS.md} +0 -0
  611. /package/docs/{dashboard-v2-plan.md → archive/dashboard-v2-plan.md} +0 -0
  612. /package/docs/{removable-code-analysis.md → archive/removable-code-analysis.md} +0 -0
  613. /package/docs/{competitive-analysis-mcp-agent-mail.md → competitive/MCP_AGENT_MAIL.md} +0 -0
@@ -0,0 +1,222 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Automated PTY input test for Claude CLI
4
+ * Tests different input methods without user interaction
5
+ * Run inside workspace container: node /app/dist/scripts/test-pty-input-auto.js
6
+ */
7
+
8
+ import * as pty from 'node-pty';
9
+
10
+ const TEST_CODE = 'test-auth-code-12345';
11
+ const INPUT_METHOD = process.argv[2] || '1';
12
+
13
+ // Debug: Log all escape sequences we send
14
+ function logHex(label, data) {
15
+ const hex = Buffer.from(data).toString('hex').replace(/(.{2})/g, '$1 ').trim();
16
+ console.log(`[HEX] ${label}: ${hex}`);
17
+ }
18
+
19
+ function stripAnsi(str) {
20
+ return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
21
+ }
22
+
23
+ async function main() {
24
+ console.log(`\nTesting PTY input method ${INPUT_METHOD} with code: ${TEST_CODE}\n`);
25
+
26
+ const proc = pty.spawn('claude', [], {
27
+ name: 'xterm-256color',
28
+ cols: 120,
29
+ rows: 30,
30
+ cwd: '/workspace',
31
+ env: {
32
+ ...process.env,
33
+ NO_COLOR: '1',
34
+ TERM: 'xterm-256color',
35
+ DISPLAY: '',
36
+ },
37
+ });
38
+
39
+ let output = '';
40
+ let authUrl = null;
41
+ let codePromptSeen = false;
42
+ let codeSent = false;
43
+ const prompts = [
44
+ { pattern: /dark\s*(mode|theme)/i, response: '\r', name: 'dark mode' },
45
+ { pattern: /select\s*login|how\s*would\s*you\s*like|subscription\s*or.*api/i, response: '\r', name: 'login method' },
46
+ ];
47
+ const respondedPrompts = new Set();
48
+
49
+ proc.onData((data) => {
50
+ output += data;
51
+ const clean = stripAnsi(data);
52
+
53
+ // Log meaningful output
54
+ if (clean.trim()) {
55
+ const lines = clean.trim().split('\n').map(l => l.trim()).filter(l => l);
56
+ for (const line of lines) {
57
+ if (line.length > 3 && !line.match(/^[·✢*✶✻✽]+$/)) {
58
+ console.log('[PTY]', line.substring(0, 120));
59
+ }
60
+ }
61
+ }
62
+
63
+ // Auto-respond to prompts
64
+ for (const prompt of prompts) {
65
+ if (!respondedPrompts.has(prompt.name) && prompt.pattern.test(clean)) {
66
+ respondedPrompts.add(prompt.name);
67
+ console.log(`\n[AUTO] Responding to: ${prompt.name}`);
68
+ setTimeout(() => proc.write(prompt.response), 100);
69
+ }
70
+ }
71
+
72
+ // Capture auth URL
73
+ const urlMatch = clean.match(/(https:\/\/[^\s]+)/);
74
+ if (urlMatch && !authUrl) {
75
+ authUrl = urlMatch[1];
76
+ console.log('\n[CAPTURED] Auth URL detected');
77
+ }
78
+
79
+ // Look for code paste prompt - various patterns Claude might use
80
+ const codePromptPatterns = [
81
+ /paste.*code/i,
82
+ /enter.*code/i,
83
+ /authorization.*code/i,
84
+ /code.*here/i,
85
+ /waiting.*code/i,
86
+ /input.*code/i,
87
+ ];
88
+
89
+ if (authUrl && !codePromptSeen && !codeSent) {
90
+ for (const pattern of codePromptPatterns) {
91
+ if (pattern.test(clean)) {
92
+ codePromptSeen = true;
93
+ console.log('\n[DETECTED] Code prompt pattern:', pattern.toString());
94
+ break;
95
+ }
96
+ }
97
+ }
98
+
99
+ // Also look for the text input box indicator from Ink
100
+ // After URL is shown and some time passes, try sending the code
101
+ if (authUrl && !codeSent) {
102
+ // Check if we see any indication we should enter the code
103
+ const outputLower = stripAnsi(output).toLowerCase();
104
+ const hasCodePrompt = outputLower.includes('paste') ||
105
+ outputLower.includes('enter the code') ||
106
+ outputLower.includes('authorization code') ||
107
+ outputLower.includes("browser didn't open");
108
+
109
+ if (hasCodePrompt || output.length > 5000) {
110
+ codeSent = true;
111
+ console.log('\n[SENDING] Sending code after prompt/timeout...');
112
+ setTimeout(() => sendCode(proc), 500);
113
+ }
114
+ }
115
+ });
116
+
117
+ proc.onExit(({ exitCode }) => {
118
+ console.log('\n[EXIT] Claude exited with code:', exitCode);
119
+ console.log('[TOTAL OUTPUT LENGTH]', output.length);
120
+
121
+ // Check for credentials
122
+ import('fs').then(fs => {
123
+ const credPath = '/home/workspace/.claude/.credentials.json';
124
+ if (fs.existsSync(credPath)) {
125
+ console.log('[SUCCESS] Credentials file found!');
126
+ const creds = fs.readFileSync(credPath, 'utf8');
127
+ console.log('[CREDS]', creds.substring(0, 200));
128
+ } else {
129
+ console.log('[RESULT] No credentials file created (expected with test code)');
130
+ }
131
+ });
132
+
133
+ setTimeout(() => process.exit(exitCode), 1000);
134
+ });
135
+
136
+ async function sendCode(ptyProc) {
137
+ const PASTE_START = '\x1b[200~';
138
+ const PASTE_END = '\x1b[201~';
139
+
140
+ console.log(`[METHOD ${INPUT_METHOD}] Sending test code...`);
141
+
142
+ switch (INPUT_METHOD) {
143
+ case '1':
144
+ console.log('[1] Plain code + \\r (carriage return)');
145
+ logHex('sending', TEST_CODE + '\r');
146
+ ptyProc.write(TEST_CODE + '\r');
147
+ break;
148
+ case '2':
149
+ console.log('[2] Plain code + \\n (newline)');
150
+ logHex('sending', TEST_CODE + '\n');
151
+ ptyProc.write(TEST_CODE + '\n');
152
+ break;
153
+ case '3':
154
+ console.log('[3] Bracketed paste + \\r');
155
+ logHex('paste start', PASTE_START);
156
+ logHex('code', TEST_CODE);
157
+ logHex('paste end', PASTE_END);
158
+ ptyProc.write(PASTE_START + TEST_CODE + PASTE_END);
159
+ await new Promise(r => setTimeout(r, 200));
160
+ logHex('enter', '\r');
161
+ ptyProc.write('\r');
162
+ break;
163
+ case '4':
164
+ console.log('[4] Plain code + \\r\\n (CRLF)');
165
+ logHex('sending', TEST_CODE + '\r\n');
166
+ ptyProc.write(TEST_CODE + '\r\n');
167
+ break;
168
+ case '5':
169
+ console.log('[5] Character by character + \\r');
170
+ for (const char of TEST_CODE) {
171
+ ptyProc.write(char);
172
+ await new Promise(r => setTimeout(r, 10));
173
+ }
174
+ await new Promise(r => setTimeout(r, 200));
175
+ logHex('enter', '\r');
176
+ ptyProc.write('\r');
177
+ break;
178
+ case '6':
179
+ console.log('[6] Code then wait, then Enter separately');
180
+ logHex('code only', TEST_CODE);
181
+ ptyProc.write(TEST_CODE);
182
+ await new Promise(r => setTimeout(r, 1000));
183
+ console.log('[6] Now sending Enter...');
184
+ logHex('enter', '\r');
185
+ ptyProc.write('\r');
186
+ break;
187
+ case '7':
188
+ console.log('[7] Send Enter first then code then Enter');
189
+ ptyProc.write('\r'); // Clear any existing state
190
+ await new Promise(r => setTimeout(r, 200));
191
+ logHex('code + enter', TEST_CODE + '\r');
192
+ ptyProc.write(TEST_CODE + '\r');
193
+ break;
194
+ case '8':
195
+ console.log('[8] Ctrl+M (same as \\r but explicit)');
196
+ logHex('code + ctrl-m', TEST_CODE + '\x0d');
197
+ ptyProc.write(TEST_CODE + '\x0d');
198
+ break;
199
+ default:
200
+ console.log('[DEFAULT] Plain code + \\r');
201
+ ptyProc.write(TEST_CODE + '\r');
202
+ }
203
+
204
+ console.log('[SENT] Waiting for response...');
205
+
206
+ // Give it more time to process and show error
207
+ setTimeout(() => {
208
+ console.log('\n[TIMEOUT] Test complete, terminating...');
209
+ console.log('[FINAL OUTPUT CHECK] Last 500 chars of output:');
210
+ console.log(stripAnsi(output).slice(-500));
211
+ ptyProc.kill();
212
+ }, 20000);
213
+ }
214
+
215
+ // Failsafe timeout
216
+ setTimeout(() => {
217
+ console.log('\n[FAILSAFE] Max time reached, terminating...');
218
+ proc.kill();
219
+ }, 60000);
220
+ }
221
+
222
+ main().catch(console.error);
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Test PTY input methods for Claude CLI
4
+ * Run inside workspace container: node /app/dist/scripts/test-pty-input.js
5
+ */
6
+
7
+ import * as pty from 'node-pty';
8
+ import * as readline from 'readline';
9
+
10
+ const rl = readline.createInterface({
11
+ input: process.stdin,
12
+ output: process.stdout
13
+ });
14
+
15
+ function ask(question) {
16
+ return new Promise(resolve => rl.question(question, resolve));
17
+ }
18
+
19
+ function stripAnsi(str) {
20
+ return str.replace(/\x1b\[[0-9;]*[a-zA-Z]/g, '');
21
+ }
22
+
23
+ async function main() {
24
+ console.log('Starting Claude CLI via PTY...\n');
25
+
26
+ const proc = pty.spawn('claude', [], {
27
+ name: 'xterm-256color',
28
+ cols: 120,
29
+ rows: 30,
30
+ cwd: '/workspace',
31
+ env: {
32
+ ...process.env,
33
+ NO_COLOR: '1',
34
+ TERM: 'xterm-256color',
35
+ DISPLAY: '',
36
+ },
37
+ });
38
+
39
+ let output = '';
40
+ let authUrl = null;
41
+ const prompts = [
42
+ { pattern: /dark\s*(mode|theme)/i, response: '\r', name: 'dark mode' },
43
+ { pattern: /select\s*login|how\s*would\s*you\s*like|subscription\s*or.*api/i, response: '\r', name: 'login method' },
44
+ ];
45
+ const respondedPrompts = new Set();
46
+
47
+ proc.onData((data) => {
48
+ output += data;
49
+ const clean = stripAnsi(data);
50
+
51
+ // Log output
52
+ if (clean.trim()) {
53
+ console.log('[PTY]', clean.substring(0, 200));
54
+ }
55
+
56
+ // Auto-respond to prompts
57
+ for (const prompt of prompts) {
58
+ if (!respondedPrompts.has(prompt.name) && prompt.pattern.test(clean)) {
59
+ respondedPrompts.add(prompt.name);
60
+ console.log(`\n[AUTO] Responding to: ${prompt.name}`);
61
+ setTimeout(() => proc.write(prompt.response), 100);
62
+ }
63
+ }
64
+
65
+ // Capture auth URL
66
+ const urlMatch = clean.match(/(https:\/\/[^\s]+)/);
67
+ if (urlMatch && !authUrl) {
68
+ authUrl = urlMatch[1];
69
+ console.log('\n[CAPTURED] Auth URL:', authUrl.substring(0, 80) + '...');
70
+ promptForCode();
71
+ }
72
+ });
73
+
74
+ proc.onExit(({ exitCode }) => {
75
+ console.log('\n[EXIT] Claude exited with code:', exitCode);
76
+ console.log('[OUTPUT LENGTH]', output.length);
77
+ rl.close();
78
+ process.exit(exitCode);
79
+ });
80
+
81
+ async function promptForCode() {
82
+ console.log('\n========================================');
83
+ console.log('Complete OAuth in browser, then paste the code here.');
84
+ console.log('========================================\n');
85
+
86
+ const code = await ask('Paste auth code: ');
87
+
88
+ console.log('\nSelect input method:');
89
+ console.log('1. Plain code + \\r');
90
+ console.log('2. Plain code + \\n');
91
+ console.log('3. Bracketed paste + \\r');
92
+ console.log('4. Bracketed paste + \\n');
93
+ console.log('5. Character by character + \\r');
94
+
95
+ const method = await ask('Choice (1-5): ');
96
+
97
+ const PASTE_START = '\x1b[200~';
98
+ const PASTE_END = '\x1b[201~';
99
+ const cleanCode = code.trim();
100
+
101
+ console.log(`\n[SENDING] Using method ${method}...`);
102
+
103
+ switch (method) {
104
+ case '1':
105
+ proc.write(cleanCode + '\r');
106
+ break;
107
+ case '2':
108
+ proc.write(cleanCode + '\n');
109
+ break;
110
+ case '3':
111
+ proc.write(PASTE_START + cleanCode + PASTE_END);
112
+ await new Promise(r => setTimeout(r, 200));
113
+ proc.write('\r');
114
+ break;
115
+ case '4':
116
+ proc.write(PASTE_START + cleanCode + PASTE_END);
117
+ await new Promise(r => setTimeout(r, 200));
118
+ proc.write('\n');
119
+ break;
120
+ case '5':
121
+ for (const char of cleanCode) {
122
+ proc.write(char);
123
+ await new Promise(r => setTimeout(r, 10));
124
+ }
125
+ await new Promise(r => setTimeout(r, 200));
126
+ proc.write('\r');
127
+ break;
128
+ default:
129
+ proc.write(cleanCode + '\r');
130
+ }
131
+
132
+ console.log('[SENT] Waiting for response...\n');
133
+
134
+ // Wait and watch output
135
+ setTimeout(() => {
136
+ console.log('\n[CHECK] Checking for credentials file...');
137
+ import('fs').then(fs => {
138
+ const credPath = '/home/workspace/.claude/.credentials.json';
139
+ if (fs.existsSync(credPath)) {
140
+ console.log('[SUCCESS] Credentials file found!');
141
+ console.log(fs.readFileSync(credPath, 'utf8').substring(0, 200));
142
+ } else {
143
+ console.log('[FAIL] No credentials file yet');
144
+ }
145
+ });
146
+ }, 5000);
147
+ }
148
+ }
149
+
150
+ main().catch(console.error);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[185],{7121:function(n,e,u){Promise.resolve().then(u.t.bind(u,7960,23))},7960:function(){}},function(n){n.O(0,[587,971,117,744],function(){return n(n.s=7121)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[860],{1766:function(n,e,t){Promise.resolve().then(t.bind(t,5804))},5804:function(n,e,t){"use strict";t.r(e),t.d(e,{default:function(){return x}});var s=t(7437),a=t(2265),i=t(7648);let l=["#4a9eff","#b388ff","#ff9e40","#00e676","#ff5c5c","#00ffc8"];function r(n){let e=0;for(let t=0;t<n.length;t++)e=n.charCodeAt(t)+((e<<5)-e);return l[Math.abs(e)%l.length]}function c(n){return n.slice(0,2).toUpperCase()}function o(n){return n<60?"".concat(n,"s"):n<3600?"".concat(Math.floor(n/60),"m"):n<86400?"".concat(Math.floor(n/3600),"h ").concat(Math.floor(n%3600/60),"m"):"".concat(Math.floor(n/86400),"d ").concat(Math.floor(n%86400/3600),"h")}function d(n){return new Date(n).toLocaleTimeString("en-US",{hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1})}function x(){var n,e,t,l;let[x,g]=(0,a.useState)(null),[m,u]=(0,a.useState)(null),[f,b]=(0,a.useState)(!0);if((0,a.useEffect)(()=>{let n=async()=>{try{let n=await fetch("/api/metrics");if(!n.ok)throw Error("Failed to fetch metrics");let e=await n.json();g(e),u(null)}catch(n){u(n instanceof Error?n.message:"Failed to load metrics")}finally{b(!1)}};n();let e=setInterval(n,5e3);return()=>clearInterval(e)},[]),f)return(0,s.jsxs)("div",{className:"metrics-page",children:[(0,s.jsx)("style",{children:p}),(0,s.jsxs)("div",{className:"loading",children:[(0,s.jsx)("div",{className:"spinner"}),(0,s.jsx)("p",{children:"Loading metrics..."})]})]});if(m||!x)return(0,s.jsxs)("div",{className:"metrics-page",children:[(0,s.jsx)("style",{children:p}),(0,s.jsxs)("div",{className:"error-state",children:[(0,s.jsx)("p",{children:m||"No metrics available"}),(0,s.jsx)("button",{onClick:()=>window.location.reload(),children:"Retry"})]})]});let j=(null!==(t=null===(n=x.sessions)||void 0===n?void 0:n.errorRate)&&void 0!==t?t:0)<=1?"healthy":(null!==(l=null===(e=x.sessions)||void 0===e?void 0:e.errorRate)&&void 0!==l?l:0)<=5?"warning":"critical";return(0,s.jsxs)("div",{className:"metrics-page",children:[(0,s.jsx)("style",{children:p}),(0,s.jsx)("header",{className:"header",children:(0,s.jsxs)("div",{className:"header-content",children:[(0,s.jsxs)("div",{className:"header-left",children:[(0,s.jsxs)(i.default,{href:"/",className:"back-link",children:[(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M19 12H5M12 19l-7-7 7-7"})}),"Dashboard"]}),(0,s.jsxs)("div",{className:"logo",children:[(0,s.jsx)("div",{className:"logo-icon",children:(0,s.jsxs)("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"white",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M3 3v18h18"}),(0,s.jsx)("path",{d:"M18 17V9"}),(0,s.jsx)("path",{d:"M13 17V5"}),(0,s.jsx)("path",{d:"M8 17v-3"})]})}),(0,s.jsxs)("div",{className:"logo-text",children:["Agent ",(0,s.jsx)("span",{children:"Metrics"})]})]})]}),(0,s.jsxs)("div",{className:"live-indicator",children:[(0,s.jsx)("span",{className:"live-dot"}),"LIVE"]})]})}),(0,s.jsxs)("main",{className:"main",children:[(0,s.jsxs)("div",{className:"stats-grid",children:[(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Total Agents"}),(0,s.jsx)("div",{className:"stat-value accent-cyan",children:x.totalAgents}),(0,s.jsxs)("div",{className:"stat-subtext",children:[x.onlineAgents," online / ",x.offlineAgents," offline"]})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Online Now"}),(0,s.jsx)("div",{className:"stat-value accent-green",children:x.onlineAgents}),(0,s.jsxs)("div",{className:"stat-subtext",children:[x.totalAgents>0?Math.round(x.onlineAgents/x.totalAgents*100):0,"% availability"]})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Total Messages"}),(0,s.jsx)("div",{className:"stat-value accent-blue",children:x.totalMessages.toLocaleString()}),(0,s.jsx)("div",{className:"stat-subtext",children:"all time"})]}),(0,s.jsxs)("div",{className:"stat-card",children:[(0,s.jsx)("div",{className:"stat-label",children:"Avg. Throughput"}),(0,s.jsx)("div",{className:"stat-value accent-orange",children:x.throughput.avgMessagesPerMinute}),(0,s.jsx)("div",{className:"stat-subtext",children:"messages / minute"})]})]}),(0,s.jsxs)("section",{className:"section",children:[(0,s.jsx)("div",{className:"section-header",children:(0,s.jsx)("h2",{className:"section-title",children:"Message Throughput"})}),(0,s.jsx)("div",{className:"throughput-panel",children:(0,s.jsxs)("div",{className:"throughput-grid",children:[(0,s.jsx)(h,{value:x.throughput.messagesLastMinute,label:"Last Minute",max:10}),(0,s.jsx)(h,{value:x.throughput.messagesLastHour,label:"Last Hour",max:100}),(0,s.jsx)(h,{value:x.throughput.messagesLast24Hours,label:"Last 24 Hours",max:1e3}),(0,s.jsx)(h,{value:x.throughput.avgMessagesPerMinute,label:"Avg / Min",max:5})]})})]}),x.sessions&&(0,s.jsxs)("section",{className:"section",children:[(0,s.jsxs)("div",{className:"section-header",children:[(0,s.jsx)("h2",{className:"section-title",children:"Session Lifecycle"}),(0,s.jsxs)("span",{className:"error-rate-indicator ".concat(j),children:[(x.sessions.errorRate||0).toFixed(1),"% error rate"]})]}),(0,s.jsxs)("div",{className:"lifecycle-panel",children:[(0,s.jsxs)("div",{className:"lifecycle-grid",children:[(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-purple",children:x.sessions.totalSessions}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Total Sessions"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-blue",children:x.sessions.activeSessions}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Active"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-green",children:x.sessions.closedByAgent}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Clean Close"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-orange",children:x.sessions.closedByDisconnect}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Disconnect"})]}),(0,s.jsxs)("div",{className:"lifecycle-item",children:[(0,s.jsx)("div",{className:"lifecycle-value accent-red",children:x.sessions.closedByError}),(0,s.jsx)("div",{className:"lifecycle-label",children:"Error"})]})]}),x.sessions.recentSessions&&x.sessions.recentSessions.length>0&&(0,s.jsxs)("table",{className:"sessions-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Agent"}),(0,s.jsx)("th",{children:"Status"}),(0,s.jsx)("th",{children:"Messages"}),(0,s.jsx)("th",{children:"Started"}),(0,s.jsx)("th",{children:"Duration"})]})}),(0,s.jsx)("tbody",{children:x.sessions.recentSessions.slice(0,5).map((n,e)=>{let t=new Date(n.startedAt),a=Math.floor(((n.endedAt?new Date(n.endedAt):new Date).getTime()-t.getTime())/1e3),i=n.closedBy||"active",l=n.closedBy?"agent"===n.closedBy?"Clean":"disconnect"===n.closedBy?"Disconnect":"Error":"Active";return(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsxs)("div",{className:"agent-name",children:[(0,s.jsx)("div",{className:"agent-avatar",style:{background:r(n.agentName)},children:c(n.agentName)}),(0,s.jsx)("span",{className:"agent-name-text",children:n.agentName})]})}),(0,s.jsx)("td",{children:(0,s.jsx)("span",{className:"closed-badge ".concat(i),children:l})}),(0,s.jsx)("td",{className:"metric-cell",children:n.messageCount}),(0,s.jsx)("td",{className:"uptime-cell",children:d(n.startedAt)}),(0,s.jsx)("td",{className:"uptime-cell",children:o(a)})]},e)})})]})]})]}),(0,s.jsxs)("section",{className:"section",children:[(0,s.jsx)("div",{className:"section-header",children:(0,s.jsx)("h2",{className:"section-title",children:"Agent Health"})}),(0,s.jsx)("div",{className:"agents-table-container",children:0===x.agents.length?(0,s.jsxs)("div",{className:"empty-state",children:[(0,s.jsxs)("svg",{className:"empty-state-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,s.jsx)("path",{d:"M20 21v-2a4 4 0 0 0-4-4H8a4 4 0 0 0-4 4v2"}),(0,s.jsx)("circle",{cx:"12",cy:"7",r:"4"})]}),(0,s.jsx)("p",{className:"empty-state-text",children:"No agents registered yet"})]}):(0,s.jsxs)("table",{className:"agents-table",children:[(0,s.jsx)("thead",{children:(0,s.jsxs)("tr",{children:[(0,s.jsx)("th",{children:"Agent"}),(0,s.jsx)("th",{children:"Status"}),(0,s.jsx)("th",{children:"Messages Sent"}),(0,s.jsx)("th",{children:"Messages Received"}),(0,s.jsx)("th",{children:"Uptime"}),(0,s.jsx)("th",{children:"Last Seen"})]})}),(0,s.jsx)("tbody",{children:x.agents.map(n=>(0,s.jsxs)("tr",{children:[(0,s.jsx)("td",{children:(0,s.jsxs)("div",{className:"agent-name",children:[(0,s.jsx)("div",{className:"agent-avatar",style:{background:r(n.name)},children:c(n.name)}),(0,s.jsx)("span",{className:"agent-name-text",children:n.name})]})}),(0,s.jsx)("td",{children:(0,s.jsx)("span",{className:"status-badge ".concat(n.isOnline?"online":"offline"),children:n.isOnline?"Online":"Offline"})}),(0,s.jsx)("td",{className:"metric-cell sent",children:n.messagesSent.toLocaleString()}),(0,s.jsx)("td",{className:"metric-cell received",children:n.messagesReceived.toLocaleString()}),(0,s.jsx)("td",{className:"uptime-cell",children:o(n.uptimeSeconds)}),(0,s.jsx)("td",{className:"uptime-cell",children:d(n.lastSeen)})]},n.name))})]})})]}),(0,s.jsxs)("div",{className:"last-updated",children:["Last updated: ",d(x.timestamp)]})]})]})}function h(n){let{value:e,label:t,max:a}=n,i=Math.min(e/a*100,100);return(0,s.jsxs)("div",{className:"throughput-item",children:[(0,s.jsx)("div",{className:"throughput-value",children:e}),(0,s.jsx)("div",{className:"throughput-label",children:t}),(0,s.jsx)("div",{className:"throughput-bar",children:(0,s.jsx)("div",{className:"throughput-bar-fill",style:{width:"".concat(i,"%")}})})]})}let p="\n .metrics-page {\n min-height: 100vh;\n background: #1a1d21;\n color: #e8e8e8;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;\n }\n\n .header {\n position: sticky;\n top: 0;\n z-index: 100;\n background: #1a1a2e;\n border-bottom: 1px solid #2a2a3e;\n padding: 16px 32px;\n }\n\n .header-content {\n max-width: 1400px;\n margin: 0 auto;\n display: flex;\n align-items: center;\n justify-content: space-between;\n }\n\n .header-left {\n display: flex;\n align-items: center;\n gap: 16px;\n }\n\n .back-link {\n display: flex;\n align-items: center;\n gap: 8px;\n color: #888;\n text-decoration: none;\n font-size: 14px;\n font-weight: 500;\n padding: 8px 12px;\n border-radius: 6px;\n transition: all 0.2s;\n }\n\n .back-link:hover {\n color: #4a9eff;\n background: rgba(74, 158, 255, 0.1);\n }\n\n .logo {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .logo-icon {\n width: 32px;\n height: 32px;\n background: linear-gradient(135deg, #1e3a5f 0%, #2a4a6e 100%);\n border: 1px solid #3a5a7e;\n border-radius: 8px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .logo-text {\n font-size: 18px;\n font-weight: 600;\n letter-spacing: -0.3px;\n }\n\n .logo-text span {\n color: #4a9eff;\n }\n\n .live-indicator {\n display: flex;\n align-items: center;\n gap: 8px;\n padding: 6px 12px;\n background: rgba(34, 197, 94, 0.1);\n border: 1px solid rgba(34, 197, 94, 0.3);\n border-radius: 20px;\n font-family: 'IBM Plex Mono', monospace;\n font-size: 12px;\n font-weight: 500;\n color: #22c55e;\n }\n\n .live-dot {\n width: 8px;\n height: 8px;\n background: #22c55e;\n border-radius: 50%;\n animation: pulse 2s ease-in-out infinite;\n box-shadow: 0 0 10px rgba(34, 197, 94, 0.4);\n }\n\n @keyframes pulse {\n 0%, 100% { opacity: 1; transform: scale(1); }\n 50% { opacity: 0.5; transform: scale(0.9); }\n }\n\n .main {\n position: relative;\n z-index: 1;\n max-width: 1400px;\n margin: 0 auto;\n padding: 24px 32px 48px;\n }\n\n .loading, .error-state {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n height: 100vh;\n gap: 16px;\n }\n\n .spinner {\n width: 32px;\n height: 32px;\n border: 2px solid rgba(255, 255, 255, 0.1);\n border-top-color: #4a9eff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n }\n\n @keyframes spin {\n to { transform: rotate(360deg); }\n }\n\n .error-state button {\n padding: 10px 20px;\n background: #1264a3;\n color: white;\n border: none;\n border-radius: 6px;\n cursor: pointer;\n }\n\n .stats-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 16px;\n margin-bottom: 24px;\n }\n\n .stat-card {\n background: #222529;\n border: 1px solid #2a2a3e;\n border-radius: 8px;\n padding: 20px;\n transition: all 0.2s ease;\n }\n\n .stat-card:hover {\n border-color: #3a3a4e;\n background: #282c30;\n }\n\n .stat-label {\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #888;\n margin-bottom: 8px;\n }\n\n .stat-value {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n }\n\n .stat-value.accent-cyan { color: #4a9eff; }\n .stat-value.accent-green { color: #22c55e; }\n .stat-value.accent-orange { color: #f59e0b; }\n .stat-value.accent-blue { color: #6366f1; }\n\n .stat-subtext {\n font-size: 12px;\n color: #666;\n margin-top: 8px;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n .section {\n margin-bottom: 24px;\n }\n\n .section-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 12px;\n }\n\n .section-title {\n font-size: 13px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 1px;\n color: #888;\n display: flex;\n align-items: center;\n gap: 10px;\n }\n\n .section-title::before {\n content: '';\n width: 3px;\n height: 14px;\n background: #4a9eff;\n border-radius: 2px;\n }\n\n .throughput-panel, .lifecycle-panel {\n background: #222529;\n border: 1px solid #2a2a3e;\n border-radius: 8px;\n padding: 24px;\n }\n\n .throughput-grid {\n display: grid;\n grid-template-columns: repeat(4, 1fr);\n gap: 24px;\n }\n\n .throughput-item {\n text-align: center;\n }\n\n .throughput-value {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 40px;\n font-weight: 700;\n color: #4a9eff;\n line-height: 1;\n }\n\n .throughput-label {\n font-size: 12px;\n color: #888;\n margin-top: 8px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .throughput-bar {\n height: 4px;\n background: #2a2a3e;\n border-radius: 2px;\n margin-top: 12px;\n overflow: hidden;\n }\n\n .throughput-bar-fill {\n height: 100%;\n background: linear-gradient(90deg, #4a9eff, #6366f1);\n border-radius: 2px;\n transition: width 0.5s ease;\n }\n\n .lifecycle-grid {\n display: grid;\n grid-template-columns: repeat(5, 1fr);\n gap: 20px;\n }\n\n .lifecycle-item {\n text-align: center;\n }\n\n .lifecycle-value {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 32px;\n font-weight: 700;\n line-height: 1;\n }\n\n .lifecycle-value.accent-purple { color: #a78bfa; }\n .lifecycle-value.accent-red { color: #ef4444; }\n\n .lifecycle-label {\n font-size: 11px;\n color: #888;\n margin-top: 8px;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .error-rate-indicator {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 600;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n .error-rate-indicator.healthy {\n background: rgba(34, 197, 94, 0.15);\n color: #22c55e;\n }\n\n .error-rate-indicator.warning {\n background: rgba(245, 158, 11, 0.15);\n color: #f59e0b;\n }\n\n .error-rate-indicator.critical {\n background: rgba(239, 68, 68, 0.15);\n color: #ef4444;\n }\n\n .sessions-table, .agents-table {\n width: 100%;\n border-collapse: collapse;\n margin-top: 16px;\n }\n\n .sessions-table th, .sessions-table td,\n .agents-table th, .agents-table td {\n padding: 12px 16px;\n text-align: left;\n }\n\n .sessions-table th, .agents-table th {\n background: #1a1a2e;\n font-size: 11px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n color: #888;\n border-bottom: 1px solid #2a2a3e;\n }\n\n .sessions-table tr, .agents-table tr {\n border-bottom: 1px solid #2a2a3e;\n }\n\n .sessions-table tr:last-child, .agents-table tr:last-child {\n border-bottom: none;\n }\n\n .agents-table tr:hover {\n background: rgba(74, 158, 255, 0.03);\n }\n\n .agents-table-container {\n background: #222529;\n border: 1px solid #2a2a3e;\n border-radius: 8px;\n overflow: hidden;\n }\n\n .agent-name {\n display: flex;\n align-items: center;\n gap: 12px;\n }\n\n .agent-avatar {\n width: 32px;\n height: 32px;\n border-radius: 6px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-weight: 600;\n font-size: 12px;\n color: white;\n }\n\n .agent-name-text {\n font-weight: 600;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n .status-badge {\n display: inline-flex;\n align-items: center;\n gap: 6px;\n padding: 4px 10px;\n border-radius: 12px;\n font-size: 12px;\n font-weight: 500;\n }\n\n .status-badge.online {\n background: rgba(34, 197, 94, 0.15);\n color: #22c55e;\n }\n\n .status-badge.offline {\n background: rgba(107, 114, 128, 0.15);\n color: #6b7280;\n }\n\n .status-badge::before {\n content: '';\n width: 6px;\n height: 6px;\n border-radius: 50%;\n background: currentColor;\n }\n\n .closed-badge {\n display: inline-flex;\n align-items: center;\n gap: 4px;\n padding: 2px 8px;\n border-radius: 10px;\n font-size: 11px;\n font-weight: 500;\n }\n\n .closed-badge.agent {\n background: rgba(34, 197, 94, 0.15);\n color: #22c55e;\n }\n\n .closed-badge.disconnect {\n background: rgba(245, 158, 11, 0.15);\n color: #f59e0b;\n }\n\n .closed-badge.error {\n background: rgba(239, 68, 68, 0.15);\n color: #ef4444;\n }\n\n .closed-badge.active {\n background: rgba(74, 158, 255, 0.15);\n color: #4a9eff;\n }\n\n .metric-cell {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 14px;\n }\n\n .metric-cell.sent { color: #4a9eff; }\n .metric-cell.received { color: #a78bfa; }\n\n .uptime-cell {\n font-family: 'IBM Plex Mono', monospace;\n font-size: 13px;\n color: #888;\n }\n\n .empty-state {\n padding: 48px 32px;\n text-align: center;\n }\n\n .empty-state-icon {\n width: 48px;\n height: 48px;\n margin: 0 auto 16px;\n color: #666;\n opacity: 0.5;\n }\n\n .empty-state-text {\n color: #666;\n font-size: 14px;\n }\n\n .last-updated {\n text-align: center;\n padding: 20px;\n font-size: 12px;\n color: #666;\n font-family: 'IBM Plex Mono', monospace;\n }\n\n @media (max-width: 1200px) {\n .stats-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n .throughput-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n .lifecycle-grid {\n grid-template-columns: repeat(3, 1fr);\n }\n }\n\n @media (max-width: 768px) {\n .header {\n padding: 12px 16px;\n }\n .main {\n padding: 16px;\n }\n .stats-grid {\n grid-template-columns: 1fr;\n }\n .throughput-grid {\n grid-template-columns: 1fr;\n }\n .lifecycle-grid {\n grid-template-columns: repeat(2, 1fr);\n }\n }\n"}},function(n){n.O(0,[648,971,117,744],function(){return n(n.s=1766)}),_N_E=n.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[931],{8440:function(e,t,n){Promise.resolve().then(n.bind(n,7666))},7666:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return eD}});var s=n(7437),a=n(2265);let l={backend:{primary:"#1264a3",light:"#e8f4fd",dark:"#0d4f82",text:"#ffffff"},frontend:{primary:"#7c3aed",light:"#f3e8ff",dark:"#5b21b6",text:"#ffffff"},infra:{primary:"#ea580c",light:"#fff7ed",dark:"#c2410c",text:"#ffffff"},lead:{primary:"#2bac76",light:"#ecfdf5",dark:"#059669",text:"#ffffff"},test:{primary:"#0d9488",light:"#f0fdfa",dark:"#0f766e",text:"#ffffff"},data:{primary:"#dc2626",light:"#fef2f2",dark:"#b91c1c",text:"#ffffff"},api:{primary:"#2563eb",light:"#eff6ff",dark:"#1d4ed8",text:"#ffffff"},worker:{primary:"#9333ea",light:"#faf5ff",dark:"#7e22ce",text:"#ffffff"},monitor:{primary:"#0891b2",light:"#ecfeff",dark:"#0e7490",text:"#ffffff"},security:{primary:"#be123c",light:"#fff1f2",dark:"#9f1239",text:"#ffffff"}},r=[{primary:"#6366f1",light:"#eef2ff",dark:"#4f46e5",text:"#ffffff"},{primary:"#ec4899",light:"#fdf2f8",dark:"#db2777",text:"#ffffff"},{primary:"#14b8a6",light:"#f0fdfa",dark:"#0d9488",text:"#ffffff"},{primary:"#f59e0b",light:"#fffbeb",dark:"#d97706",text:"#000000"},{primary:"#8b5cf6",light:"#f5f3ff",dark:"#7c3aed",text:"#ffffff"},{primary:"#06b6d4",light:"#ecfeff",dark:"#0891b2",text:"#ffffff"},{primary:"#f43f5e",light:"#fff1f2",dark:"#e11d48",text:"#ffffff"},{primary:"#84cc16",light:"#f7fee7",dark:"#65a30d",text:"#000000"}],i={online:"#22c55e",offline:"#6b7280",busy:"#eab308",processing:"#6366f1",error:"#ef4444",attention:"#ef4444"};function c(e){return e.toLowerCase().split("-").filter(Boolean)}function o(e){return c(e)[0]||e.toLowerCase()}function d(e){let t=o(e);return t in l?l[t]:r[function(e){let t=0;for(let n=0;n<e.length;n++)t=(t<<5)-t+e.charCodeAt(n),t&=t;return Math.abs(t)}(t)%r.length]}function u(e){let t=c(e);return 0===t.length?e.substring(0,2).toUpperCase():t.length>=2?(t[0][0]+t[1][0]).toUpperCase():t[0].substring(0,2).toUpperCase()}function h(e){let t=new Map;for(let n of e){let e=n.team||o(n.name),s=d(n.name),a=t.get(e);a||(a={prefix:e,displayName:g(e),color:s,agents:[],isExpanded:!0},t.set(e,a)),a.agents.push(n)}let n=Array.from(t.values()).sort((e,t)=>e.prefix.localeCompare(t.prefix));for(let e of n)e.agents.sort((e,t)=>e.name.localeCompare(t.name));return n}function m(e){let t=e.split("-").filter(Boolean);return 0===t.length?e:g(t[t.length-1])}function x(e){return e.split("-").filter(Boolean).map(g).join(" > ")}function p(e,t){return t?e.filter(e=>(function(e,t){if(!t)return!0;let n=t.toLowerCase(),s=e.toLowerCase();return!!s.includes(n)||s.split("-").some(e=>e.includes(n))})(e.name,t)):e}function g(e){return e?e.charAt(0).toUpperCase()+e.slice(1):e}function f(e){let t=0,n=0,s=0;for(let a of e)"online"===a.status?t++:"offline"===a.status&&n++,a.needsAttention&&s++;return{total:e.length,online:t,offline:n,needsAttention:s}}function j(e){let{isProcessing:t,processingStartedAt:n,size:l="medium",showElapsed:r=!1}=e,[i,c]=(0,a.useState)(0);return((0,a.useEffect)(()=>{if(!t||!n){c(0);return}let e=()=>{c(Date.now()-n)};e();let s=setInterval(e,1e3);return()=>clearInterval(s)},[t,n]),t)?(0,s.jsxs)("div",{className:"thinking-indicator ".concat({small:"thinking-indicator-small",medium:"thinking-indicator-medium",large:"thinking-indicator-large"}[l]),children:[(0,s.jsxs)("div",{className:"thinking-dots",children:[(0,s.jsx)("span",{className:"thinking-dot"}),(0,s.jsx)("span",{className:"thinking-dot"}),(0,s.jsx)("span",{className:"thinking-dot"})]}),r&&i>0&&(0,s.jsx)("span",{className:"thinking-elapsed",children:(e=>{let t=Math.floor(e/1e3);return t<60?"".concat(t,"s"):"".concat(Math.floor(t/60),"m ").concat(t%60,"s")})(i)})]}):null}function v(e){let{isProcessing:t}=e;return t?(0,s.jsx)("span",{className:"thinking-dot-inline",title:"Processing...",children:(0,s.jsx)("span",{className:"thinking-dot-pulse"})}):null}function y(e){let{agent:t,isSelected:n=!1,showBreadcrumb:a=!1,compact:l=!1,displayNameOverride:r,onClick:c,onMessageClick:o,onReleaseClick:h}=e,p=d(t.name),g=u(t.name),f=r||m(t.name),y=i[t.status]||i.offline,N=()=>{null==c||c(t)},b=e=>{e.stopPropagation(),null==h||h(t)};return l?(0,s.jsxs)("div",{className:"agent-card-compact ".concat(n?"selected":""),onClick:N,style:{"--agent-primary":p.primary,"--agent-light":p.light},children:[(0,s.jsx)("div",{className:"agent-avatar-small",style:{backgroundColor:p.primary},children:(0,s.jsx)("span",{style:{color:p.text},children:g})}),(0,s.jsxs)("div",{className:"agent-compact-info",children:[(0,s.jsx)("span",{className:"agent-name",children:f}),!r&&(0,s.jsx)("span",{className:"agent-breadcrumb-compact",children:x(t.name)})]}),(0,s.jsxs)("div",{className:"agent-compact-actions",children:[t.isSpawned&&h&&(0,s.jsx)("button",{className:"release-btn-compact",onClick:b,title:"Kill agent",children:(0,s.jsx)(w,{})}),t.isProcessing?(0,s.jsx)(v,{isProcessing:!0}):(0,s.jsx)("div",{className:"agent-status-dot",style:{backgroundColor:y}}),t.needsAttention&&(0,s.jsx)("div",{className:"attention-badge"})]})]}):(0,s.jsxs)("div",{className:"agent-card ".concat(n?"selected":""),onClick:N,style:{"--agent-primary":p.primary,"--agent-light":p.light,"--agent-dark":p.dark},children:[(0,s.jsxs)("div",{className:"agent-card-header",children:[(0,s.jsxs)("div",{className:"agent-avatar",style:{backgroundColor:p.primary},children:[(0,s.jsx)("span",{style:{color:p.text},children:g}),(0,s.jsx)("div",{className:"status-indicator",style:{backgroundColor:y}})]}),(0,s.jsxs)("div",{className:"agent-info",children:[(0,s.jsxs)("div",{className:"agent-name-row",children:[(0,s.jsx)("span",{className:"agent-display-name",children:f}),t.needsAttention&&(0,s.jsx)("span",{className:"attention-badge",title:"Needs attention",children:"!"})]}),a?(0,s.jsx)("span",{className:"agent-breadcrumb",children:x(t.name)}):(0,s.jsx)("span",{className:"agent-full-name",children:t.name})]})]}),t.isProcessing&&(0,s.jsxs)("div",{className:"agent-thinking",children:[(0,s.jsx)(j,{isProcessing:!0,processingStartedAt:t.processingStartedAt,size:"medium",showElapsed:!0}),(0,s.jsx)("span",{className:"thinking-label",children:"Thinking..."})]}),t.currentTask&&!t.isProcessing&&(0,s.jsxs)("div",{className:"agent-task",children:[(0,s.jsx)("span",{className:"task-label",children:"Working on:"}),(0,s.jsx)("span",{className:"task-text",children:t.currentTask})]}),(0,s.jsxs)("div",{className:"agent-card-footer",children:[(0,s.jsxs)("div",{className:"agent-meta",children:[t.cli&&(0,s.jsx)("span",{className:"agent-cli",children:t.cli}),void 0!==t.messageCount&&t.messageCount>0&&(0,s.jsxs)("span",{className:"message-count",children:[t.messageCount," msgs"]}),t.isSpawned&&(0,s.jsx)("span",{className:"agent-spawned-badge",children:"spawned"})]}),(0,s.jsxs)("div",{className:"agent-actions",children:[t.isSpawned&&h&&(0,s.jsx)("button",{className:"release-btn",onClick:b,title:"Release agent",children:(0,s.jsx)(w,{})}),o&&(0,s.jsx)("button",{className:"message-btn",onClick:e=>{e.stopPropagation(),null==o||o(t)},title:"Send message",children:(0,s.jsx)(k,{})})]})]})]})}function k(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:(0,s.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}function w(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",className:"release-icon",children:[(0,s.jsx)("path",{d:"M12 22c5.523 0 10-4.477 10-10a9.96 9.96 0 0 0-3-7.141",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,s.jsx)("path",{d:"M12 22C6.477 22 2 17.523 2 12a9.96 9.96 0 0 1 3-7.141",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round"}),(0,s.jsx)("line",{x1:"12",y1:"2",x2:"12",y2:"12",stroke:"currentColor",strokeWidth:"2.5",strokeLinecap:"round"})]})}function N(e){let{agents:t,selectedAgent:n,searchQuery:l="",onAgentSelect:r,onAgentMessage:i,onReleaseClick:c,compact:o=!1,showGroupStats:d=!0}=e,[u,m]=(0,a.useState)(new Set),[x,g]=(0,a.useState)(!0),f=(0,a.useMemo)(()=>p(t,l),[t,l]),j=(0,a.useMemo)(()=>h(f),[f]);(0,a.useMemo)(()=>{0===u.size&&j.length>0&&m(new Set(j.map(e=>e.prefix)))},[j]);let v=e=>{m(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};return 0===t.length?(0,s.jsxs)("div",{className:"agent-list-empty",children:[(0,s.jsx)(S,{}),(0,s.jsx)("p",{children:"No agents connected"})]}):0===f.length?(0,s.jsxs)("div",{className:"agent-list-empty",children:[(0,s.jsx)(A,{}),(0,s.jsxs)("p",{children:['No agents match "',l,'"']})]}):(0,s.jsxs)("div",{className:"agent-list",children:[j.length>1&&(0,s.jsxs)("div",{className:"agent-list-header",children:[(0,s.jsxs)("span",{className:"agent-count",children:[f.length," agents"]}),(0,s.jsx)("button",{className:"toggle-all-btn",onClick:()=>{x?m(new Set):m(new Set(j.map(e=>e.prefix))),g(!x)},children:x?"Collapse all":"Expand all"})]}),j.map(e=>(0,s.jsx)(b,{group:e,isExpanded:u.has(e.prefix),selectedAgent:n,compact:o,showStats:d,onToggle:()=>v(e.prefix),onAgentSelect:r,onAgentMessage:i,onReleaseClick:c},e.prefix))]})}function b(e){let{group:t,isExpanded:n,selectedAgent:a,compact:l,showStats:r,onToggle:c,onAgentSelect:o,onAgentMessage:d,onReleaseClick:u}=e,h=r?f(t.agents):null;return(0,s.jsxs)("div",{className:"agent-group",children:[(0,s.jsxs)("button",{className:"agent-group-header",onClick:c,style:{"--group-color":t.color.primary,"--group-light":t.color.light},children:[(0,s.jsx)("div",{className:"group-color-bar"}),(0,s.jsx)(C,{expanded:n}),(0,s.jsx)("span",{className:"group-name",children:t.displayName}),(0,s.jsxs)("span",{className:"group-count",children:["(",t.agents.length,")"]}),r&&h&&(0,s.jsxs)("div",{className:"group-stats",children:[h.online>0&&(0,s.jsxs)("span",{className:"stat online",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.online}}),h.online]}),h.needsAttention>0&&(0,s.jsxs)("span",{className:"stat attention",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.attention}}),h.needsAttention]})]})]}),n&&(0,s.jsx)("div",{className:"agent-group-content",children:t.agents.map(e=>(0,s.jsx)(y,{agent:e,isSelected:e.name===a,compact:l,displayNameOverride:m(e.name),onClick:o,onMessageClick:d,onReleaseClick:u},e.name))})]})}function C(e){let{expanded:t}=e;return(0,s.jsx)("svg",{className:"chevron-icon ".concat(t?"expanded":""),width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("polyline",{points:"9 18 15 12 9 6"})})}function S(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:[(0,s.jsx)("circle",{cx:"12",cy:"8",r:"5"}),(0,s.jsx)("path",{d:"M20 21a8 8 0 1 0-16 0"})]})}function A(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function M(e){return e.split(/[-_]/).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join(" ")}function E(e){let{projects:t,localAgents:n=[],currentProject:l,selectedAgent:r,searchQuery:i="",onProjectSelect:c,onAgentSelect:o,onReleaseClick:d,compact:u=!1}=e,[h,m]=(0,a.useState)(()=>new Set(t.map(e=>e.id))),x=(0,a.useMemo)(()=>{let e=i.toLowerCase().trim();if(!e)return{projects:t,localAgents:n};let s=n.filter(t=>{var n;return t.name.toLowerCase().includes(e)||(null===(n=t.currentTask)||void 0===n?void 0:n.toLowerCase().includes(e))});return{projects:t.map(t=>{var n;let s=(null===(n=t.name)||void 0===n?void 0:n.toLowerCase().includes(e))||t.path.toLowerCase().includes(e),a=t.agents.filter(t=>{var n;return t.name.toLowerCase().includes(e)||(null===(n=t.currentTask)||void 0===n?void 0:n.toLowerCase().includes(e))});return s||a.length>0?{...t,agents:s?t.agents:a}:null}).filter(Boolean),localAgents:s}},[t,n,i]),p=e=>{m(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})},g=x.localAgents.length+x.projects.reduce((e,t)=>e+t.agents.length,0);return 0===g&&0===t.length&&0===n.length?(0,s.jsxs)("div",{className:"project-list-empty",children:[(0,s.jsx)(R,{}),(0,s.jsx)("p",{children:"No projects or agents"})]}):0===g&&i?(0,s.jsxs)("div",{className:"project-list-empty",children:[(0,s.jsx)(T,{}),(0,s.jsxs)("p",{children:['No results for "',i,'"']})]}):(0,s.jsxs)("div",{className:"project-list",children:[x.localAgents.length>0&&(0,s.jsx)(D,{project:{id:"__local__",path:"",name:"Local",agents:x.localAgents},isExpanded:h.has("__local__"),isCurrentProject:!0,selectedAgent:r,compact:u,onToggle:()=>p("__local__"),onAgentSelect:e=>null==o?void 0:o(e),onReleaseClick:d}),x.projects.map(e=>(0,s.jsx)(D,{project:e,isExpanded:h.has(e.id),isCurrentProject:e.id===l,selectedAgent:r,compact:u,onToggle:()=>p(e.id),onProjectSelect:()=>null==c?void 0:c(e),onAgentSelect:t=>null==o?void 0:o(t,e),onReleaseClick:d},e.id))]})}function D(e){var t;let{project:n,isExpanded:l,isCurrentProject:r,selectedAgent:c,compact:o,onToggle:u,onProjectSelect:h,onAgentSelect:m,onReleaseClick:x}=e,[p,g]=(0,a.useState)(new Set),f=(0,a.useMemo)(()=>{let e=0,t=0;for(let s of n.agents)"online"===s.status&&e++,s.needsAttention&&t++;return{online:e,needsAttention:t,total:n.agents.length}},[n.agents]),{teams:j,ungroupedAgents:v}=(0,a.useMemo)(()=>{let e=new Map,t=[];for(let s of n.agents)if(s.team){let t=e.get(s.team)||[];t.push(s),e.set(s.team,t)}else t.push(s);return{teams:Array.from(e.entries()).map(e=>{let[t,n]=e;return{name:t,agents:n}}).sort((e,t)=>e.name.localeCompare(t.name)),ungroupedAgents:t}},[n.agents]),k=e=>{g(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n})};(0,a.useEffect)(()=>{l&&0===p.size&&j.length>0&&g(new Set(j.map(e=>e.name)))},[l,j,p]);let w=d(n.name||n.id),N=n.name||n.path.split("/").pop()||n.id;return(0,s.jsxs)("div",{className:"project-section ".concat(r?"current":""),children:[(0,s.jsxs)("button",{className:"project-header",onClick:u,onDoubleClick:h,style:{"--project-color":w.primary,"--project-light":w.light},children:[(0,s.jsx)("div",{className:"project-color-bar"}),(0,s.jsx)(B,{expanded:l}),(0,s.jsx)(W,{}),(0,s.jsx)("span",{className:"project-name",children:N}),(0,s.jsxs)("span",{className:"project-count",children:["(",f.total,")"]}),(0,s.jsxs)("div",{className:"project-stats",children:[f.online>0&&(0,s.jsxs)("span",{className:"stat online",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.online}}),f.online]}),f.needsAttention>0&&(0,s.jsxs)("span",{className:"stat attention",children:[(0,s.jsx)("span",{className:"stat-dot",style:{backgroundColor:i.attention}}),f.needsAttention]})]}),(null===(t=n.lead)||void 0===t?void 0:t.connected)&&(0,s.jsx)("span",{className:"lead-indicator",title:"Lead: ".concat(n.lead.name),children:"★"})]}),l&&(0,s.jsxs)("div",{className:"project-agents",children:[j.map(e=>(0,s.jsxs)("div",{className:"team-group",children:[(0,s.jsxs)("button",{className:"team-header",onClick:()=>k(e.name),children:[(0,s.jsx)(B,{expanded:p.has(e.name)}),(0,s.jsx)(L,{}),(0,s.jsx)("span",{className:"team-name",children:e.name}),(0,s.jsxs)("span",{className:"team-count",children:["(",e.agents.length,")"]})]}),p.has(e.name)&&(0,s.jsx)("div",{className:"team-agents",children:e.agents.map(t=>(0,s.jsx)(y,{agent:t,isSelected:t.name===c,compact:o,displayNameOverride:function(e,t){let n=e.toLowerCase(),s=t.toLowerCase().replace(/-?team$/i,"");if(s&&n.startsWith(s+"-")||s&&n.startsWith(s+"_"))return M(e.substring(s.length+1));let a=e.split("-");return a.length>1?M(a[a.length-1]):M(e)}(t.name,e.name),onClick:m,onReleaseClick:x},t.name))})]},e.name)),v.map(e=>(0,s.jsx)(y,{agent:e,isSelected:e.name===c,compact:o,onClick:m,onReleaseClick:x},e.name))]})]})}function B(e){let{expanded:t}=e;return(0,s.jsx)("svg",{className:"chevron-icon ".concat(t?"expanded":""),width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("polyline",{points:"9 18 15 12 9 6"})})}function W(){return(0,s.jsx)("svg",{className:"folder-icon",width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function L(){return(0,s.jsxs)("svg",{className:"team-icon",width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2"}),(0,s.jsx)("circle",{cx:"9",cy:"7",r:"4"}),(0,s.jsx)("path",{d:"M23 21v-2a4 4 0 0 0-3-3.87"}),(0,s.jsx)("path",{d:"M16 3.13a4 4 0 0 1 0 7.75"})]})}function R(){return(0,s.jsx)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:(0,s.jsx)("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}function T(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function P(e){let{agents:t,projects:n=[],currentProject:l,selectedAgent:r,viewMode:i,isFleetAvailable:c,isConnected:o,isOpen:d=!1,onAgentSelect:u,onProjectSelect:h,onViewModeChange:m,onSpawnClick:x,onReleaseClick:p,onClose:g}=e,[f,j]=(0,a.useState)(""),v=n.length>0;return(0,s.jsxs)("aside",{className:"sidebar ".concat(d?"open":""),children:[(0,s.jsxs)("div",{className:"sidebar-header",children:[(0,s.jsxs)("div",{className:"sidebar-title",children:[(0,s.jsx)("h1",{children:"Agent Relay"}),(0,s.jsx)(O,{isConnected:o})]}),c&&(0,s.jsxs)("div",{className:"view-mode-toggle",children:[(0,s.jsx)("button",{className:"toggle-btn ".concat("local"===i?"active":""),onClick:()=>null==m?void 0:m("local"),children:"Local"}),(0,s.jsx)("button",{className:"toggle-btn ".concat("fleet"===i?"active":""),onClick:()=>null==m?void 0:m("fleet"),children:"Fleet"})]})]}),(0,s.jsxs)("div",{className:"sidebar-search",children:[(0,s.jsx)(F,{}),(0,s.jsx)("input",{type:"text",placeholder:"Search agents...",value:f,onChange:e=>j(e.target.value)}),f&&(0,s.jsx)("button",{className:"clear-btn",onClick:()=>j(""),children:(0,s.jsx)(V,{})})]}),(0,s.jsx)("div",{className:"sidebar-content",children:v?(0,s.jsx)(E,{projects:n,localAgents:t,currentProject:l,selectedAgent:r,searchQuery:f,onProjectSelect:h,onAgentSelect:u,onReleaseClick:p,compact:!0}):(0,s.jsx)(N,{agents:t,selectedAgent:r,searchQuery:f,onAgentSelect:e=>null==u?void 0:u(e),onReleaseClick:p,compact:!0,showGroupStats:!0})}),(0,s.jsx)("div",{className:"sidebar-footer",children:(0,s.jsxs)("button",{className:"spawn-btn",onClick:x,children:[(0,s.jsx)(_,{}),"Spawn Agent"]})})]})}function O(e){let{isConnected:t}=e;return(0,s.jsx)("div",{className:"connection-indicator ".concat(t?"connected":"disconnected"),title:t?"Connected":"Disconnected"})}function F(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function V(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,s.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function _(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),(0,s.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function z(e){let{currentChannel:t,selectedAgent:n,onCommandPaletteOpen:a,onSettingsClick:l,onMenuClick:r}=e,i="general"===t,c=n?d(n.name):null;return(0,s.jsxs)("header",{className:"header",children:[(0,s.jsx)("button",{className:"mobile-menu-btn",onClick:r,"aria-label":"Open menu",children:(0,s.jsx)(U,{})}),(0,s.jsx)("div",{className:"header-left",children:i?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"channel-prefix",children:"#"}),(0,s.jsx)("span",{className:"channel-name",children:"general"}),(0,s.jsx)("span",{className:"channel-topic",children:"All agent communications"})]}):n?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"agent-avatar-small",style:{backgroundColor:null==c?void 0:c.primary},children:(0,s.jsx)("span",{style:{color:null==c?void 0:c.text},children:u(n.name)})}),(0,s.jsxs)("div",{className:"channel-info",children:[(0,s.jsx)("span",{className:"channel-name",children:n.name}),(0,s.jsx)("span",{className:"channel-breadcrumb",children:x(n.name)})]}),n.status&&(0,s.jsx)("span",{className:"agent-status-badge",children:n.status})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"channel-prefix",children:"@"}),(0,s.jsx)("span",{className:"channel-name",children:t})]})}),(0,s.jsxs)("div",{className:"header-right",children:[(0,s.jsxs)("button",{className:"header-btn command-palette-btn",onClick:a,title:"Command Palette (⌘K)",children:[(0,s.jsx)(I,{}),(0,s.jsx)("span",{children:"Search"}),(0,s.jsx)("kbd",{children:"⌘K"})]}),(0,s.jsx)("a",{href:"/metrics",className:"header-btn icon-btn",title:"Metrics",children:(0,s.jsx)(H,{})}),(0,s.jsx)("button",{className:"header-btn icon-btn",onClick:l,title:"Settings",children:(0,s.jsx)(K,{})})]})]})}function I(){return(0,s.jsxs)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function H(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,s.jsx)("path",{d:"M3 3v18h18"}),(0,s.jsx)("path",{d:"M18 17V9"}),(0,s.jsx)("path",{d:"M13 17V5"}),(0,s.jsx)("path",{d:"M8 17v-3"})]})}function K(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"3"}),(0,s.jsx)("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})}function U(){return(0,s.jsxs)("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,s.jsx)("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),(0,s.jsx)("line",{x1:"3",y1:"6",x2:"21",y2:"6"}),(0,s.jsx)("line",{x1:"3",y1:"18",x2:"21",y2:"18"})]})}function q(e){let{messages:t,currentChannel:n,onThreadClick:l,highlightedMessageId:r}=e,i=(0,a.useRef)(null),c=(0,a.useRef)(null);(0,a.useEffect)(()=>{var e;null===(e=c.current)||void 0===e||e.scrollIntoView({behavior:"smooth"})},[t.length]);let o=t.filter(e=>"general"===n?"*"===e.to||e.isBroadcast:e.from===n||e.to===n);return 0===o.length?(0,s.jsxs)("div",{className:"message-list-empty",children:[(0,s.jsx)(G,{}),(0,s.jsx)("h3",{children:"No messages yet"}),(0,s.jsx)("p",{children:"general"===n?"Broadcast messages will appear here":"Messages with ".concat(n," will appear here")})]}):(0,s.jsxs)("div",{className:"message-list",ref:i,children:[o.map(e=>(0,s.jsx)(J,{message:e,isHighlighted:e.id===r,onThreadClick:l},e.id)),(0,s.jsx)("div",{ref:c})]})}function J(e){let{message:t,isHighlighted:n,onThreadClick:l}=e,r=d(t.from),i=function(e){let t=new Date(e),n=new Date;if(t.toDateString()===n.toDateString())return t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"});let s=new Date(n);return(s.setDate(s.getDate()-1),t.toDateString()===s.toDateString())?"Yesterday ".concat(t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"})):t.toLocaleDateString([],{month:"short",day:"numeric",hour:"2-digit",minute:"2-digit"})}(t.timestamp);return(0,s.jsxs)("div",{className:"message-item ".concat(n?"highlighted":""),children:[(0,s.jsx)("div",{className:"message-avatar",style:{backgroundColor:r.primary},children:(0,s.jsx)("span",{style:{color:r.text},children:u(t.from)})}),(0,s.jsxs)("div",{className:"message-content",children:[(0,s.jsxs)("div",{className:"message-header",children:[(0,s.jsx)("span",{className:"message-sender",children:t.from}),"*"!==t.to&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"message-arrow",children:"→"}),(0,s.jsx)("span",{className:"message-recipient",children:t.to})]}),(0,s.jsx)("span",{className:"message-time",children:i}),"*"===t.to&&(0,s.jsx)("span",{className:"message-badge broadcast",children:"broadcast"})]}),(0,s.jsx)("div",{className:"message-body",children:t.content.replace(/\\n/g,"\n").replace(/\r\n/g,"\n").replace(/\r/g,"\n").split("\n").map((e,t)=>(0,s.jsxs)(a.Fragment,{children:[t>0&&(0,s.jsx)("br",{}),function(e){let t=/(https?:\/\/[^\s]+)/g;return e.split(t).map((e,n)=>t.test(e)?(0,s.jsx)("a",{href:e,target:"_blank",rel:"noopener noreferrer",className:"message-link",children:e},n):e)}(e)]},t))}),t.replyCount&&t.replyCount>0&&(0,s.jsxs)("button",{className:"message-thread-btn",onClick:()=>null==l?void 0:l(t.id),children:[(0,s.jsx)(Q,{}),(0,s.jsxs)("span",{children:[t.replyCount," ",1===t.replyCount?"reply":"replies"]})]})]})]})}function G(){return(0,s.jsx)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:(0,s.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}function Q(){return(0,s.jsx)("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"})})}function Z(e){let{isOpen:t,onClose:n,agents:l,projects:r=[],currentProject:i,onAgentSelect:c,onProjectSelect:o,onSpawnClick:d,onSettingsClick:u,onGeneralClick:h,customCommands:m=[]}=e,[x,p]=(0,a.useState)(""),[g,f]=(0,a.useState)(0),j=(0,a.useRef)(null),v=(0,a.useRef)(null),y=(0,a.useMemo)(()=>[...r.map(e=>{let t=e.name||e.path.split("/").pop()||e.id,a=e.id===i;return{id:"project-".concat(e.id),label:t,description:a?"Current project • ".concat(e.agents.length," agents"):"".concat(e.agents.length," agents"),category:"projects",icon:(0,s.jsx)(es,{}),action:()=>{null==o||o(e),n()}}}),...l.map(e=>({id:"agent-".concat(e.name),label:e.name,description:e.currentTask||e.status,category:"agents",icon:(0,s.jsx)($,{name:e.name}),action:()=>{c(e),n()}})),{id:"spawn-agent",label:"Spawn Agent",description:"Launch a new agent instance",category:"actions",icon:(0,s.jsx)(X,{}),shortcut:"⌘⇧S",action:()=>{d(),n()}},{id:"broadcast",label:"Broadcast Message",description:"Send message to all agents",category:"actions",icon:(0,s.jsx)(ee,{}),action:()=>{n()}},{id:"nav-general",label:"Go to #general",description:"View all broadcast messages",category:"navigation",icon:(0,s.jsx)(et,{}),action:()=>{null==h||h(),n()}},...u?[{id:"settings",label:"Settings",description:"Configure dashboard preferences",category:"settings",icon:(0,s.jsx)(en,{}),shortcut:"⌘,",action:()=>{u(),n()}}]:[],...m],[l,r,i,c,o,d,u,h,n,m]),k=(0,a.useMemo)(()=>{if(!x.trim())return y;let e=x.toLowerCase();return y.filter(t=>{var n;return t.label.toLowerCase().includes(e)||(null===(n=t.description)||void 0===n?void 0:n.toLowerCase().includes(e))||t.category.toLowerCase().includes(e)})},[y,x]),w=(0,a.useMemo)(()=>{let e={};for(let t of k)e[t.category]||(e[t.category]=[]),e[t.category].push(t);return e},[k]),N=(0,a.useMemo)(()=>["projects","agents","actions","navigation","settings"].flatMap(e=>w[e]||[]),[w]);(0,a.useEffect)(()=>{f(0)},[x]),(0,a.useEffect)(()=>{t&&(p(""),f(0),setTimeout(()=>{var e;return null===(e=j.current)||void 0===e?void 0:e.focus()},0))},[t]),(0,a.useEffect)(()=>{if(v.current&&N.length>0){let e=v.current.querySelector('[data-index="'.concat(g,'"]'));null==e||e.scrollIntoView({block:"nearest"})}},[g,N.length]);let b=(0,a.useCallback)(e=>{switch(e.key){case"ArrowDown":e.preventDefault(),f(e=>Math.min(e+1,N.length-1));break;case"ArrowUp":e.preventDefault(),f(e=>Math.max(e-1,0));break;case"Enter":e.preventDefault(),N[g]&&N[g].action();break;case"Escape":e.preventDefault(),n()}},[N,g,n]);if(!t)return null;let C={projects:"Projects",agents:"Agents",actions:"Actions",navigation:"Navigation",settings:"Settings"},S=0;return(0,s.jsx)("div",{className:"command-palette-overlay",onClick:n,children:(0,s.jsxs)("div",{className:"command-palette",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"command-palette-input-wrapper",children:[(0,s.jsx)(Y,{}),(0,s.jsx)("input",{ref:j,type:"text",className:"command-palette-input",placeholder:"Search commands, agents...",value:x,onChange:e=>p(e.target.value),onKeyDown:b}),(0,s.jsx)("kbd",{className:"command-palette-kbd",children:"ESC"})]}),(0,s.jsx)("div",{className:"command-palette-list",ref:v,children:0===N.length?(0,s.jsxs)("div",{className:"command-palette-empty",children:['No results for "',x,'"']}):Object.entries(w).map(e=>{let[t,n]=e;return n.length?(0,s.jsxs)("div",{className:"command-palette-group",children:[(0,s.jsx)("div",{className:"command-palette-group-label",children:C[t]||t}),n.map(e=>{let t=S++;return(0,s.jsxs)("button",{"data-index":t,className:"command-palette-item ".concat(t===g?"selected":""),onClick:e.action,onMouseEnter:()=>f(t),children:[(0,s.jsx)("span",{className:"command-palette-item-icon",children:e.icon}),(0,s.jsxs)("span",{className:"command-palette-item-content",children:[(0,s.jsx)("span",{className:"command-palette-item-label",children:e.label}),e.description&&(0,s.jsx)("span",{className:"command-palette-item-desc",children:e.description})]}),e.shortcut&&(0,s.jsx)("kbd",{className:"command-palette-item-shortcut",children:e.shortcut})]},e.id)})]},t):null})})]})})}function $(e){let{name:t}=e,n=d(t);return(0,s.jsx)("div",{className:"command-palette-agent-icon",style:{backgroundColor:n.primary,color:n.text},children:u(t)})}function Y(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"11",cy:"11",r:"8"}),(0,s.jsx)("line",{x1:"21",y1:"21",x2:"16.65",y2:"16.65"})]})}function X(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"12",y1:"5",x2:"12",y2:"19"}),(0,s.jsx)("line",{x1:"5",y1:"12",x2:"19",y2:"12"})]})}function ee(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"2"}),(0,s.jsx)("path",{d:"M16.24 7.76a6 6 0 0 1 0 8.49m-8.48-.01a6 6 0 0 1 0-8.49m11.31-2.82a10 10 0 0 1 0 14.14m-14.14 0a10 10 0 0 1 0-14.14"})]})}function et(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"4",y1:"9",x2:"20",y2:"9"}),(0,s.jsx)("line",{x1:"4",y1:"15",x2:"20",y2:"15"}),(0,s.jsx)("line",{x1:"10",y1:"3",x2:"8",y2:"21"}),(0,s.jsx)("line",{x1:"16",y1:"3",x2:"14",y2:"21"})]})}function en(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"3"}),(0,s.jsx)("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"})]})}function es(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"})})}let ea=[{id:"claude",name:"Claude",command:"claude",description:"Claude Code CLI agent",icon:"\uD83E\uDD16"},{id:"codex",name:"Codex",command:"codex",description:"OpenAI Codex agent",icon:"⚡"},{id:"custom",name:"Custom",command:"",description:"Custom command",icon:"\uD83D\uDD27"}],el=["frontend","backend","lead","test","docs","review","deploy","data"];function er(e){let{isOpen:t,onClose:n,onSpawn:l,existingAgents:r,isSpawning:i=!1,error:c}=e,[o,h]=(0,a.useState)(ea[0]),[m,x]=(0,a.useState)(""),[p,g]=(0,a.useState)(""),[f,j]=(0,a.useState)(""),[v,y]=(0,a.useState)(""),[k,w]=(0,a.useState)(null),N=(0,a.useRef)(null),b=(0,a.useCallback)(()=>{let e="claude"===o.id?"claude":o.id,t=1;for(;r.includes("".concat(e,"-").concat(t));)t++;return"".concat(e,"-").concat(t)},[o,r]);(0,a.useEffect)(()=>{t&&(h(ea[0]),x(""),g(""),j(""),y(""),w(null),setTimeout(()=>{var e;return null===(e=N.current)||void 0===e?void 0:e.focus()},100))},[t]);let C=(0,a.useCallback)(e=>e.trim()?/^[a-zA-Z][a-zA-Z0-9-]*$/.test(e)?r.includes(e)?"An agent with this name already exists":null:"Name must start with a letter and contain only letters, numbers, and hyphens":"Name is required",[r]),S=async e=>{e.preventDefault();let t=m.trim()||b(),s=C(t);if(s){w(s);return}let a="custom"===o.id?p:o.command;if(!a.trim()){w("Command is required");return}w(null),await l({name:t,command:a.trim(),cwd:f.trim()||void 0,team:v.trim()||void 0})&&n()};if(!t)return null;let A=m?d(m):d(b()),M=c||k;return(0,s.jsx)("div",{className:"spawn-modal-overlay",onClick:n,children:(0,s.jsxs)("div",{className:"spawn-modal",onClick:e=>e.stopPropagation(),onKeyDown:e=>{"Escape"===e.key&&(e.preventDefault(),n())},children:[(0,s.jsxs)("div",{className:"spawn-modal-header",children:[(0,s.jsx)("h2",{children:"Spawn New Agent"}),(0,s.jsx)("button",{className:"spawn-modal-close",onClick:n,"aria-label":"Close",children:(0,s.jsx)(ei,{})})]}),(0,s.jsxs)("form",{onSubmit:S,children:[(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsx)("label",{className:"spawn-modal-label",children:"Agent Type"}),(0,s.jsx)("div",{className:"spawn-modal-templates",children:ea.map(e=>(0,s.jsxs)("button",{type:"button",className:"spawn-modal-template ".concat(o.id===e.id?"selected":""),onClick:()=>h(e),children:[(0,s.jsx)("span",{className:"spawn-modal-template-icon",children:e.icon}),(0,s.jsx)("span",{className:"spawn-modal-template-name",children:e.name}),(0,s.jsx)("span",{className:"spawn-modal-template-desc",children:e.description})]},e.id))})]}),(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsx)("label",{className:"spawn-modal-label",htmlFor:"agent-name",children:"Agent Name"}),(0,s.jsxs)("div",{className:"spawn-modal-name-input",children:[(0,s.jsx)("div",{className:"spawn-modal-name-preview",style:{backgroundColor:A.primary,color:A.text},children:u(m||b())}),(0,s.jsx)("input",{ref:N,id:"agent-name",type:"text",className:"spawn-modal-input",placeholder:b(),value:m,onChange:e=>{x(e.target.value),w(null)},disabled:i})]}),(0,s.jsx)("div",{className:"spawn-modal-name-suggestions",children:el.slice(0,4).map(e=>(0,s.jsxs)("button",{type:"button",className:"spawn-modal-suggestion",onClick:()=>x("".concat(e,"-1")),children:[e,"-"]},e))})]}),"custom"===o.id&&(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsx)("label",{className:"spawn-modal-label",htmlFor:"agent-command",children:"Command"}),(0,s.jsx)("input",{id:"agent-command",type:"text",className:"spawn-modal-input",placeholder:"e.g., python agent.py",value:p,onChange:e=>g(e.target.value),disabled:i})]}),(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsxs)("label",{className:"spawn-modal-label",htmlFor:"agent-cwd",children:["Working Directory ",(0,s.jsx)("span",{className:"spawn-modal-optional",children:"(optional)"})]}),(0,s.jsx)("input",{id:"agent-cwd",type:"text",className:"spawn-modal-input",placeholder:"Current directory",value:f,onChange:e=>j(e.target.value),disabled:i})]}),(0,s.jsxs)("div",{className:"spawn-modal-section",children:[(0,s.jsxs)("label",{className:"spawn-modal-label",htmlFor:"agent-team",children:["Team ",(0,s.jsx)("span",{className:"spawn-modal-optional",children:"(optional)"})]}),(0,s.jsx)("input",{id:"agent-team",type:"text",className:"spawn-modal-input",placeholder:"e.g., frontend, backend, infra",value:v,onChange:e=>y(e.target.value),disabled:i})]}),M&&(0,s.jsxs)("div",{className:"spawn-modal-error",children:[(0,s.jsx)(ec,{}),(0,s.jsx)("span",{children:M})]}),(0,s.jsxs)("div",{className:"spawn-modal-actions",children:[(0,s.jsx)("button",{type:"button",className:"spawn-modal-btn spawn-modal-btn-secondary",onClick:n,disabled:i,children:"Cancel"}),(0,s.jsx)("button",{type:"submit",className:"spawn-modal-btn spawn-modal-btn-primary",disabled:i,children:i?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(ed,{}),"Spawning..."]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(eo,{}),"Spawn Agent"]})})]})]})]})})}function ei(){return(0,s.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,s.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function ec(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,s.jsx)("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),(0,s.jsx)("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]})}function eo(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"}),(0,s.jsx)("path",{d:"m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"}),(0,s.jsx)("path",{d:"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"}),(0,s.jsx)("path",{d:"M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"})]})}function ed(){return(0,s.jsx)("svg",{className:"spawn-modal-spinner",width:"16",height:"16",viewBox:"0 0 24 24",children:(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"2",fill:"none",strokeDasharray:"32",strokeLinecap:"round"})})}let eu={theme:"system",notifications:{enabled:!0,sound:!0,desktop:!1,mentionsOnly:!1},display:{compactMode:!1,showTimestamps:!0,showAvatars:!0,animationsEnabled:!0},connection:{autoReconnect:!0,reconnectDelay:3e3,keepAliveInterval:3e4}};function eh(e){let{isOpen:t,onClose:n,settings:l,onSettingsChange:r,onResetSettings:i}=e,[c,o]=(0,a.useState)("appearance"),d=(0,a.useCallback)((e,t,n)=>{let s=l[e];r({...l,[e]:{...s,[t]:n}})},[l,r]),u=(0,a.useCallback)(e=>{r({...l,theme:e})},[l,r]);return t?(0,s.jsx)("div",{className:"settings-overlay",onClick:n,children:(0,s.jsxs)("div",{className:"settings-panel",onClick:e=>e.stopPropagation(),children:[(0,s.jsxs)("div",{className:"settings-header",children:[(0,s.jsx)("h2",{children:"Settings"}),(0,s.jsx)("button",{className:"settings-close",onClick:n,children:(0,s.jsx)(ex,{})})]}),(0,s.jsxs)("div",{className:"settings-tabs",children:[(0,s.jsxs)("button",{className:"settings-tab ".concat("appearance"===c?"active":""),onClick:()=>o("appearance"),children:[(0,s.jsx)(ep,{}),"Appearance"]}),(0,s.jsxs)("button",{className:"settings-tab ".concat("notifications"===c?"active":""),onClick:()=>o("notifications"),children:[(0,s.jsx)(eg,{}),"Notifications"]}),(0,s.jsxs)("button",{className:"settings-tab ".concat("connection"===c?"active":""),onClick:()=>o("connection"),children:[(0,s.jsx)(ef,{}),"Connection"]})]}),(0,s.jsxs)("div",{className:"settings-content",children:["appearance"===c&&(0,s.jsxs)("div",{className:"settings-section",children:[(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Theme"}),(0,s.jsx)("div",{className:"settings-theme-options",children:["light","dark","system"].map(e=>(0,s.jsxs)("button",{className:"settings-theme-btn ".concat(l.theme===e?"active":""),onClick:()=>u(e),children:["light"===e&&(0,s.jsx)(ej,{}),"dark"===e&&(0,s.jsx)(ev,{}),"system"===e&&(0,s.jsx)(ey,{}),(0,s.jsx)("span",{children:e.charAt(0).toUpperCase()+e.slice(1)})]},e))})]}),(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Display Options"}),(0,s.jsx)(em,{label:"Compact mode",description:"Show more content in less space",checked:l.display.compactMode,onChange:e=>d("display","compactMode",e)}),(0,s.jsx)(em,{label:"Show timestamps",description:"Display time for each message",checked:l.display.showTimestamps,onChange:e=>d("display","showTimestamps",e)}),(0,s.jsx)(em,{label:"Show avatars",description:"Display agent avatars in messages",checked:l.display.showAvatars,onChange:e=>d("display","showAvatars",e)}),(0,s.jsx)(em,{label:"Enable animations",description:"Smooth transitions and effects",checked:l.display.animationsEnabled,onChange:e=>d("display","animationsEnabled",e)})]})]}),"notifications"===c&&(0,s.jsx)("div",{className:"settings-section",children:(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Notification Preferences"}),(0,s.jsx)(em,{label:"Enable notifications",description:"Receive alerts for new messages",checked:l.notifications.enabled,onChange:e=>d("notifications","enabled",e)}),(0,s.jsx)(em,{label:"Sound alerts",description:"Play sound for new messages",checked:l.notifications.sound,onChange:e=>d("notifications","sound",e),disabled:!l.notifications.enabled}),(0,s.jsx)(em,{label:"Desktop notifications",description:"Show system notifications",checked:l.notifications.desktop,onChange:e=>d("notifications","desktop",e),disabled:!l.notifications.enabled}),(0,s.jsx)(em,{label:"Mentions only",description:"Only notify when mentioned",checked:l.notifications.mentionsOnly,onChange:e=>d("notifications","mentionsOnly",e),disabled:!l.notifications.enabled})]})}),"connection"===c&&(0,s.jsx)("div",{className:"settings-section",children:(0,s.jsxs)("div",{className:"settings-group",children:[(0,s.jsx)("label",{className:"settings-label",children:"Connection Settings"}),(0,s.jsx)(em,{label:"Auto-reconnect",description:"Automatically reconnect on disconnect",checked:l.connection.autoReconnect,onChange:e=>d("connection","autoReconnect",e)}),(0,s.jsxs)("div",{className:"settings-input-group",children:[(0,s.jsx)("label",{children:"Reconnect delay (ms)"}),(0,s.jsx)("input",{type:"number",className:"settings-input",value:l.connection.reconnectDelay,onChange:e=>d("connection","reconnectDelay",parseInt(e.target.value)||3e3),min:1e3,max:3e4,step:1e3,disabled:!l.connection.autoReconnect})]}),(0,s.jsxs)("div",{className:"settings-input-group",children:[(0,s.jsx)("label",{children:"Keep-alive interval (ms)"}),(0,s.jsx)("input",{type:"number",className:"settings-input",value:l.connection.keepAliveInterval,onChange:e=>d("connection","keepAliveInterval",parseInt(e.target.value)||3e4),min:5e3,max:12e4,step:5e3})]})]})})]}),(0,s.jsxs)("div",{className:"settings-footer",children:[i&&(0,s.jsx)("button",{className:"settings-reset-btn",onClick:i,children:"Reset to defaults"}),(0,s.jsx)("button",{className:"settings-done-btn",onClick:n,children:"Done"})]})]})}):null}function em(e){let{label:t,description:n,checked:a,onChange:l,disabled:r}=e;return(0,s.jsxs)("div",{className:"settings-toggle-option ".concat(r?"disabled":""),children:[(0,s.jsxs)("div",{className:"settings-toggle-info",children:[(0,s.jsx)("span",{className:"settings-toggle-label",children:t}),(0,s.jsx)("span",{className:"settings-toggle-desc",children:n})]}),(0,s.jsx)("button",{className:"settings-toggle ".concat(a?"on":""),onClick:()=>!r&&l(!a),disabled:r,role:"switch","aria-checked":a,children:(0,s.jsx)("span",{className:"settings-toggle-thumb"})})]})}function ex(){return(0,s.jsxs)("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),(0,s.jsx)("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}function ep(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"13.5",cy:"6.5",r:".5"}),(0,s.jsx)("circle",{cx:"17.5",cy:"10.5",r:".5"}),(0,s.jsx)("circle",{cx:"8.5",cy:"7.5",r:".5"}),(0,s.jsx)("circle",{cx:"6.5",cy:"12.5",r:".5"}),(0,s.jsx)("path",{d:"M12 2C6.5 2 2 6.5 2 12s4.5 10 10 10c.926 0 1.648-.746 1.648-1.688 0-.437-.18-.835-.437-1.125-.29-.289-.438-.652-.438-1.125a1.64 1.64 0 0 1 1.668-1.668h1.996c3.051 0 5.555-2.503 5.555-5.555C21.965 6.012 17.461 2 12 2z"})]})}function eg(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M18 8A6 6 0 0 0 6 8c0 7-3 9-3 9h18s-3-2-3-9"}),(0,s.jsx)("path",{d:"M13.73 21a2 2 0 0 1-3.46 0"})]})}function ef(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("path",{d:"M5 12.55a11 11 0 0 1 14.08 0"}),(0,s.jsx)("path",{d:"M1.42 9a16 16 0 0 1 21.16 0"}),(0,s.jsx)("path",{d:"M8.53 16.11a6 6 0 0 1 6.95 0"}),(0,s.jsx)("line",{x1:"12",y1:"20",x2:"12.01",y2:"20"})]})}function ej(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"5"}),(0,s.jsx)("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),(0,s.jsx)("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),(0,s.jsx)("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),(0,s.jsx)("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),(0,s.jsx)("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),(0,s.jsx)("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),(0,s.jsx)("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),(0,s.jsx)("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"})]})}function ev(){return(0,s.jsx)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:(0,s.jsx)("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"})})}function ey(){return(0,s.jsxs)("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[(0,s.jsx)("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),(0,s.jsx)("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),(0,s.jsx)("line",{x1:"12",y1:"17",x2:"12",y2:"21"})]})}function ek(e,t){let n=e.match(/^@(\S*)/);return n&&t<=n[0].length?n[1]:null}function ew(e,t){let n=e.match(/^@\S*/);return n?"@".concat(t," ")+e.substring(n[0].length):e}function eN(e){let{agents:t,inputValue:n,cursorPosition:l,onSelect:r,onClose:i,isVisible:c}=e,[o,h]=(0,a.useState)(0),m=(0,a.useRef)(null),x=(0,a.useMemo)(()=>ek(n,l),[n,l]),p=(0,a.useMemo)(()=>{if(null===x)return[];let e=x.toLowerCase(),n=[];return("*".includes(e)||"everyone".includes(e)||"all".includes(e)||"broadcast".includes(e)||""===e)&&n.push({name:"*",displayName:"@everyone",description:"Broadcast to all agents",isBroadcast:!0}),t.filter(t=>t.name.toLowerCase().includes(e)).forEach(e=>{n.push({name:e.name,displayName:"@".concat(e.name),description:e.status||"Agent"})}),n},[x,t]);(0,a.useEffect)(()=>{h(0)},[p.length]),(0,a.useEffect)(()=>{if(!m.current)return;let e=m.current.querySelector(".mention-item.selected");e&&e.scrollIntoView({block:"nearest"})},[o]);let g=(0,a.useCallback)(e=>{if(c&&0!==p.length)switch(e.key){case"ArrowDown":e.preventDefault(),h(e=>(e+1)%p.length);break;case"ArrowUp":e.preventDefault(),h(e=>(e-1+p.length)%p.length);break;case"Enter":case"Tab":e.preventDefault();let t=p[o];if(t){let e=ew(n,t.name);r(t.name,e)}break;case"Escape":e.preventDefault(),i()}},[c,p,o,n,r,i]);(0,a.useEffect)(()=>{if(c)return window.addEventListener("keydown",g),()=>window.removeEventListener("keydown",g)},[c,g]);let f=(0,a.useCallback)(e=>{let t=ew(n,e.name);r(e.name,t)},[n,r]);return c&&0!==p.length?(0,s.jsx)("div",{className:"mention-autocomplete",ref:m,children:p.map((e,t)=>(0,s.jsxs)("div",{className:"mention-item ".concat(t===o?"selected":""),onClick:()=>f(e),onMouseEnter:()=>h(t),children:[(0,s.jsx)("div",{className:"mention-avatar",style:{background:e.isBroadcast?"var(--accent-warning, #f59e0b)":d(e.name).primary},children:e.isBroadcast?"*":u(e.name)}),(0,s.jsxs)("div",{className:"mention-info",children:[(0,s.jsx)("span",{className:"mention-name",children:e.displayName}),(0,s.jsx)("span",{className:"mention-description",children:e.description})]})]},e.name))}):null}let eb={url:"",autoConnect:!0,reconnect:!0,maxReconnectAttempts:10,reconnectDelay:1e3},eC={async sendMessage(e){try{let t=await fetch("".concat("","/api/send"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)}),n=await t.json();if(t.ok&&n.success)return{success:!0};return{success:!1,error:n.error||"Failed to send message"}}catch(e){return{success:!1,error:"Network error"}}},async spawnAgent(e){try{let t=await fetch("".concat("","/api/spawn"),{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});return await t.json()}catch(t){return{success:!1,name:e.name,error:"Network error"}}},async getSpawnedAgents(){try{let e=await fetch("".concat("","/api/spawned")),t=await e.json();if(e.ok&&t.success)return{success:!0,data:{agents:t.agents||[]}};return{success:!1,error:t.error}}catch(e){return{success:!1,error:"Network error"}}},async releaseAgent(e){try{let t=await fetch("".concat("","/api/spawned/").concat(encodeURIComponent(e)),{method:"DELETE"}),n=await t.json();if(t.ok&&n.success)return{success:!0};return{success:!1,error:n.error}}catch(e){return{success:!1,error:"Network error"}}},async getData(){try{let e=await fetch("".concat("","/api/data")),t=await e.json();if(e.ok)return{success:!0,data:t};return{success:!1,error:"Failed to fetch data"}}catch(e){return{success:!1,error:"Network error"}}},async getBridgeData(){try{let e=await fetch("".concat("","/api/bridge")),t=await e.json();if(e.ok)return{success:!0,data:t};return{success:!1,error:"Failed to fetch bridge data"}}catch(e){return{success:!1,error:"Network error"}}},async getMetrics(){try{let e=await fetch("".concat("","/api/metrics")),t=await e.json();if(e.ok)return{success:!0,data:t};return{success:!1,error:"Failed to fetch metrics"}}catch(e){return{success:!1,error:"Network error"}}}};function eS(e){var t,n,l,r;let{wsUrl:i}=e,{data:c,isConnected:o,error:u}=function(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},t={...eb,...e},[n,s]=(0,a.useState)(null),[l,r]=(0,a.useState)(!1),[i,c]=(0,a.useState)(null),o=(0,a.useRef)(null),d=(0,a.useRef)(0),u=(0,a.useRef)(null),h=(0,a.useCallback)(()=>{var e;if((null===(e=o.current)||void 0===e?void 0:e.readyState)===WebSocket.OPEN)return;let n=t.url||function(){let e="https:"===window.location.protocol?"wss:":"ws:";return"".concat(e,"//").concat(window.location.host,"/ws")}();try{let e=new WebSocket(n);e.onopen=()=>{r(!0),c(null),d.current=0},e.onclose=()=>{if(r(!1),o.current=null,t.reconnect&&d.current<t.maxReconnectAttempts){let e=Math.min(t.reconnectDelay*Math.pow(2,d.current),3e4);d.current++,u.current=setTimeout(()=>{h()},e)}},e.onerror=e=>{c(Error("WebSocket connection error")),console.error("[useWebSocket] Error:",e)},e.onmessage=e=>{try{let t=JSON.parse(e.data);s(t)}catch(e){console.error("[useWebSocket] Failed to parse message:",e)}},o.current=e}catch(e){c(e instanceof Error?e:Error("Failed to create WebSocket"))}},[t.url,t.reconnect,t.maxReconnectAttempts,t.reconnectDelay]),m=(0,a.useCallback)(()=>{u.current&&(clearTimeout(u.current),u.current=null),o.current&&(o.current.close(),o.current=null),r(!1)},[]);return(0,a.useEffect)(()=>(t.autoConnect&&h(),()=>{m()}),[t.autoConnect,h,m]),{data:n,isConnected:l,error:i,connect:h,disconnect:m}}({url:i}),[m,x]=(0,a.useState)("local"),[g,j]=(0,a.useState)([]),[v,y]=(0,a.useState)(),[k,w]=(0,a.useState)(!1),[N,b]=(0,a.useState)(!1),[C,S]=(0,a.useState)(null),[A,M]=(0,a.useState)(!1),[E,D]=(0,a.useState)(!1),[B,W]=(0,a.useState)(eu),[L,R]=(0,a.useState)(!1),T=(0,a.useCallback)(()=>{window.innerWidth<=768&&R(!1)},[]),{agents:O,groups:F,selectedAgent:V,selectAgent:_,searchQuery:I,setSearchQuery:H,totalCount:K,onlineCount:U,needsAttentionCount:J}=function(e){let{agents:t,initialSelected:n,initialSearchQuery:s=""}=e,[l,r]=(0,a.useState)(null!=n?n:null),[i,c]=(0,a.useState)(s),o=(0,a.useMemo)(()=>p(t,i),[t,i]),u=(0,a.useMemo)(()=>h(o),[o]),m=(0,a.useMemo)(()=>[...o].sort((e,t)=>e.name.localeCompare(t.name)),[o]),x=(0,a.useMemo)(()=>{var e;return null!==(e=t.find(e=>e.name===l))&&void 0!==e?e:null},[t,l]),g=(0,a.useMemo)(()=>{let e=f(t);return{totalCount:e.total,onlineCount:e.online,needsAttentionCount:e.needsAttention}},[t]),j=(0,a.useCallback)(e=>{r(e)},[]),v=(0,a.useCallback)(e=>t.find(t=>t.name===e),[t]),y=(0,a.useCallback)(e=>({...e,color:d(e.name)}),[]);return{agents:o,groups:u,sortedAgents:m,selectedAgent:x,selectAgent:j,searchQuery:i,setSearchQuery:c,...g,getAgentByName:v,getAgentWithColor:y}}({agents:null!==(l=null==c?void 0:c.agents)&&void 0!==l?l:[]}),{messages:G,currentChannel:Q,setCurrentChannel:$,currentThread:Y,setCurrentThread:X,sendMessage:ee,isSending:et,sendError:en}=function(e){let{messages:t,currentChannel:n="general"}=e,[s,l]=(0,a.useState)(n),[r,i]=(0,a.useState)(null),[c,o]=(0,a.useState)(!1),[d,u]=(0,a.useState)(null),h=(0,a.useMemo)(()=>"general"===s?t:t.filter(e=>e.from===s||e.to===s),[t,s]),m=(0,a.useCallback)(e=>t.filter(t=>t.thread===e),[t]),x=(0,a.useMemo)(()=>{let e=t.filter(e=>!e.isRead).length;return{totalCount:t.length,unreadCount:e}},[t]);return{messages:h,threadMessages:m,currentChannel:s,setCurrentChannel:l,currentThread:r,setCurrentThread:i,sendMessage:(0,a.useCallback)(async(e,t,n)=>{o(!0),u(null);try{let s=await fetch("/api/send",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({to:e,message:t,thread:n})}),a=await s.json();if(s.ok&&a.success)return!0;return u(a.error||"Failed to send message"),!1}catch(e){return u("Network error"),!1}finally{o(!1)}},[]),isSending:c,sendError:d,...x}}({messages:null!==(r=null==c?void 0:c.messages)&&void 0!==r?r:[]}),es=!!(null==c?void 0:null===(n=c.fleet)||void 0===n?void 0:null===(t=n.servers)||void 0===t?void 0:t.length);(0,a.useEffect)(()=>{if(!es)return;let e=async()=>{let e=await eC.getBridgeData();if(e.success&&e.data){let{servers:t,agents:n}=e.data;j(t.map(e=>({id:e.id,path:e.url,name:e.name||e.url.split("/").pop(),agents:n.filter(t=>t.server===e.id),lead:void 0})))}};e();let t=setInterval(e,3e4);return()=>clearInterval(t)},[es]);let ea=(0,a.useCallback)(e=>{y(e.id),e.agents.length>0&&(_(e.agents[0].name),$(e.agents[0].name)),T()},[_,$,T]),el=(0,a.useCallback)(e=>{_(e.name),$(e.name),T()},[_,$,T]),ei=(0,a.useCallback)(()=>{S(null),w(!0)},[]),ec=(0,a.useCallback)(()=>{D(!0)},[]),eo=(0,a.useCallback)(async e=>{b(!0),S(null);try{let t=await eC.spawnAgent({name:e.name,cli:e.command,team:e.team});if(!t.success)return S(t.error||"Failed to spawn agent"),!1;return!0}catch(e){return S(e instanceof Error?e.message:"Failed to spawn agent"),!1}finally{b(!1)}},[]),ed=(0,a.useCallback)(async e=>{if(e.isSpawned&&window.confirm('Are you sure you want to release agent "'.concat(e.name,'"?')))try{let t=await eC.releaseAgent(e.name);t.success||console.error("Failed to release agent:",t.error)}catch(e){console.error("Failed to release agent:",e)}},[]),em=(0,a.useCallback)(()=>{M(!0)},[]);return a.useEffect(()=>{let e=e=>{let t;t="system"===e?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":e,document.documentElement.setAttribute("data-theme",t)};if(e(B.theme),"system"===B.theme){let t=window.matchMedia("(prefers-color-scheme: dark)"),n=()=>e("system");return t.addEventListener("change",n),()=>t.removeEventListener("change",n)}},[B.theme]),a.useEffect(()=>{let e=e=>{(e.metaKey||e.ctrlKey)&&"k"===e.key&&(e.preventDefault(),M(!0)),(e.metaKey||e.ctrlKey)&&e.shiftKey&&"s"===e.key&&(e.preventDefault(),ei()),"Escape"===e.key&&(M(!1),w(!1))};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[ei]),(0,s.jsxs)("div",{className:"dashboard-app",children:[(0,s.jsx)("div",{className:"sidebar-overlay ".concat(L?"visible":""),onClick:()=>R(!1)}),(0,s.jsx)(P,{agents:O,projects:g,currentProject:v,selectedAgent:null==V?void 0:V.name,viewMode:m,isFleetAvailable:es,isConnected:o,isOpen:L,onAgentSelect:el,onProjectSelect:ea,onViewModeChange:x,onSpawnClick:ei,onReleaseClick:ed,onClose:()=>R(!1)}),(0,s.jsxs)("main",{className:"dashboard-main",children:[(0,s.jsx)(z,{currentChannel:Q,selectedAgent:V,onCommandPaletteOpen:em,onSettingsClick:ec,onMenuClick:()=>R(!0)}),(0,s.jsx)("div",{className:"dashboard-content",children:u?(0,s.jsxs)("div",{className:"error-state",children:[(0,s.jsx)(eE,{}),(0,s.jsx)("h2",{children:"Connection Error"}),(0,s.jsx)("p",{children:u.message}),(0,s.jsx)("button",{onClick:()=>window.location.reload(),children:"Retry Connection"})]}):c?(0,s.jsx)("div",{className:"messages-container",children:(0,s.jsx)(q,{messages:G,currentChannel:Q,onThreadClick:e=>X(e),highlightedMessageId:null!=Y?Y:void 0})}):(0,s.jsxs)("div",{className:"loading-state",children:[(0,s.jsx)(eM,{}),(0,s.jsx)("p",{children:"Connecting to dashboard..."})]})}),(0,s.jsx)("div",{className:"message-composer",children:(0,s.jsx)(eA,{recipient:"general"===Q?"*":Q,agents:O,onSend:ee,isSending:et,error:en})})]}),(0,s.jsx)(Z,{isOpen:A,onClose:()=>M(!1),agents:O,projects:g,currentProject:v,onAgentSelect:el,onProjectSelect:ea,onSpawnClick:ei,onGeneralClick:()=>{_(null),$("general")}}),(0,s.jsx)(er,{isOpen:k,onClose:()=>w(!1),onSpawn:eo,existingAgents:O.map(e=>e.name),isSpawning:N,error:C}),(0,s.jsx)(eh,{isOpen:E,onClose:()=>D(!1),settings:B,onSettingsChange:W,onResetSettings:()=>W(eu)})]})}function eA(e){let{recipient:t,agents:n,onSend:l,isSending:r,error:i}=e,[c,o]=(0,a.useState)(""),[d,u]=(0,a.useState)(0),[h,m]=(0,a.useState)(!1),x=(0,a.useRef)(null),p=async e=>{let n,s;if(e.preventDefault(),!c.trim()||r)return;let a=c.match(/^@(\S+)\s*([\s\S]*)/);if(a){let e=a[1];s=a[2]||"",n="*"===e||"everyone"===e.toLowerCase()||"all"===e.toLowerCase()?"*":e}else n=t,s=c;await l(n,s||c)&&(o(""),m(!1))};return(0,s.jsxs)("form",{className:"composer-form",onSubmit:p,children:[(0,s.jsxs)("div",{className:"composer-input-wrapper",children:[(0,s.jsx)(eN,{agents:n,inputValue:c,cursorPosition:d,onSelect:(e,t)=>{o(t),m(!1),setTimeout(()=>{if(x.current){x.current.focus();let e=t.indexOf(" ")+1;x.current.setSelectionRange(e,e)}},0)},onClose:()=>m(!1),isVisible:h}),(0,s.jsx)("textarea",{ref:x,className:"composer-input",placeholder:"Message ".concat("*"===t?"everyone":"@"+t,"... (Shift+Enter for new line)"),value:c,onChange:e=>{let t=e.target.value,n=e.target.selectionStart||0;o(t),u(n),m(null!==ek(t,n))},onKeyDown:e=>{"Enter"!==e.key||e.shiftKey||(e.preventDefault(),c.trim()&&!r&&p(e))},onSelect:e=>u(e.target.selectionStart||0),disabled:r,rows:1})]}),(0,s.jsx)("button",{type:"submit",className:"composer-send",disabled:!c.trim()||r,title:r?"Sending...":"Send message",children:r?(0,s.jsx)("span",{className:"composer-send-text",children:"Sending..."}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("span",{className:"composer-send-text",children:"Send"}),(0,s.jsxs)("svg",{className:"composer-send-icon",width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round",children:[(0,s.jsx)("line",{x1:"22",y1:"2",x2:"11",y2:"13"}),(0,s.jsx)("polygon",{points:"22 2 15 22 11 13 2 9 22 2"})]})]})}),i&&(0,s.jsx)("span",{className:"composer-error",children:i})]})}function eM(){return(0,s.jsx)("svg",{className:"spinner",width:"24",height:"24",viewBox:"0 0 24 24",children:(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10",stroke:"currentColor",strokeWidth:"2",fill:"none",strokeDasharray:"32",strokeLinecap:"round"})})}function eE(){return(0,s.jsxs)("svg",{width:"48",height:"48",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",children:[(0,s.jsx)("circle",{cx:"12",cy:"12",r:"10"}),(0,s.jsx)("line",{x1:"12",y1:"8",x2:"12",y2:"12"}),(0,s.jsx)("line",{x1:"12",y1:"16",x2:"12.01",y2:"16"})]})}function eD(){return(0,s.jsx)(eS,{})}}},function(e){e.O(0,[971,117,744],function(){return e(e.s=8440)}),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- (self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[744],{262:function(e,n,t){Promise.resolve().then(t.t.bind(t,2846,23)),Promise.resolve().then(t.t.bind(t,9107,23)),Promise.resolve().then(t.t.bind(t,1060,23)),Promise.resolve().then(t.t.bind(t,4707,23)),Promise.resolve().then(t.t.bind(t,80,23)),Promise.resolve().then(t.t.bind(t,6423,23))}},function(e){var n=function(n){return e(e.s=n)};e.O(0,[971,117],function(){return n(4278),n(262)}),_N_E=e.O()}]);
@@ -1 +0,0 @@
1
- !function(){"use strict";var e,t,n,r,o,u,i,c,f,a={},l={};function d(e){var t=l[e];if(void 0!==t)return t.exports;var n=l[e]={exports:{}},r=!0;try{a[e](n,n.exports,d),r=!1}finally{r&&delete l[e]}return n.exports}d.m=a,e=[],d.O=function(t,n,r,o){if(n){o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[n,r,o];return}for(var i=1/0,u=0;u<e.length;u++){for(var n=e[u][0],r=e[u][1],o=e[u][2],c=!0,f=0;f<n.length;f++)i>=o&&Object.keys(d.O).every(function(e){return d.O[e](n[f])})?n.splice(f--,1):(c=!1,o<i&&(i=o));if(c){e.splice(u--,1);var a=r();void 0!==a&&(t=a)}}return t},d.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return d.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},d.t=function(e,r){if(1&r&&(e=this(e)),8&r||"object"==typeof e&&e&&(4&r&&e.__esModule||16&r&&"function"==typeof e.then))return e;var o=Object.create(null);d.r(o);var u={};t=t||[null,n({}),n([]),n(n)];for(var i=2&r&&e;"object"==typeof i&&!~t.indexOf(i);i=n(i))Object.getOwnPropertyNames(i).forEach(function(t){u[t]=function(){return e[t]}});return u.default=function(){return e},d.d(o,u),o},d.d=function(e,t){for(var n in t)d.o(t,n)&&!d.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},d.f={},d.e=function(e){return Promise.all(Object.keys(d.f).reduce(function(t,n){return d.f[n](e,t),t},[]))},d.u=function(e){},d.miniCssF=function(e){},d.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},o="_N_E:",d.l=function(e,t,n,u){if(r[e]){r[e].push(t);return}if(void 0!==n)for(var i,c,f=document.getElementsByTagName("script"),a=0;a<f.length;a++){var l=f[a];if(l.getAttribute("src")==e||l.getAttribute("data-webpack")==o+n){i=l;break}}i||(c=!0,(i=document.createElement("script")).charset="utf-8",i.timeout=120,d.nc&&i.setAttribute("nonce",d.nc),i.setAttribute("data-webpack",o+n),i.src=d.tu(e)),r[e]=[t];var s=function(t,n){i.onerror=i.onload=null,clearTimeout(p);var o=r[e];if(delete r[e],i.parentNode&&i.parentNode.removeChild(i),o&&o.forEach(function(e){return e(n)}),t)return t(n)},p=setTimeout(s.bind(null,void 0,{type:"timeout",target:i}),12e4);i.onerror=s.bind(null,i.onerror),i.onload=s.bind(null,i.onload),c&&document.head.appendChild(i)},d.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.tt=function(){return void 0===u&&(u={createScriptURL:function(e){return e}},"undefined"!=typeof trustedTypes&&trustedTypes.createPolicy&&(u=trustedTypes.createPolicy("nextjs#bundler",u))),u},d.tu=function(e){return d.tt().createScriptURL(e)},d.p="/_next/",i={272:0,587:0},d.f.j=function(e,t){var n=d.o(i,e)?i[e]:void 0;if(0!==n){if(n)t.push(n[2]);else if(/^(272|587)$/.test(e))i[e]=0;else{var r=new Promise(function(t,r){n=i[e]=[t,r]});t.push(n[2]=r);var o=d.p+d.u(e),u=Error();d.l(o,function(t){if(d.o(i,e)&&(0!==(n=i[e])&&(i[e]=void 0),n)){var r=t&&("load"===t.type?"missing":t.type),o=t&&t.target&&t.target.src;u.message="Loading chunk "+e+" failed.\n("+r+": "+o+")",u.name="ChunkLoadError",u.type=r,u.request=o,n[1](u)}},"chunk-"+e,e)}}},d.O.j=function(e){return 0===i[e]},c=function(e,t){var n,r,o=t[0],u=t[1],c=t[2],f=0;if(o.some(function(e){return 0!==i[e]})){for(n in u)d.o(u,n)&&(d.m[n]=u[n]);if(c)var a=c(d)}for(e&&e(t);f<o.length;f++)r=o[f],d.o(i,r)&&i[r]&&i[r][0](),i[r]=0;return d.O(a)},(f=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(c.bind(null,0)),f.push=c.bind(null,f.push.bind(f))}();