wednesdayai 0.6.1-dev.27 → 0.6.1-dev.28

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 (185) hide show
  1. package/dist/{agent-CQhgyAis.js → agent-BDuI5Zvc.js} +26 -26
  2. package/dist/{agent-Y_2aRBZH.js → agent-BW-Yan08.js} +11 -11
  3. package/dist/{agent-turn-runner-faZvyYiv.js → agent-turn-runner-BfXiXNe2.js} +6 -6
  4. package/dist/{agent-turn-runner-ClBJoKQQ.js → agent-turn-runner-CHm-I95T.js} +5 -5
  5. package/dist/build-info.json +3 -3
  6. package/dist/bundled/boot-md/handler.js +32 -32
  7. package/dist/bundled/bootstrap-extra-files/handler.js +4 -4
  8. package/dist/bundled/command-logger/handler.js +2 -2
  9. package/dist/bundled/session-journal/handler.js +31 -31
  10. package/dist/bundled/session-memory/handler.js +31 -31
  11. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  12. package/dist/{chrome-B3nEcesV.js → chrome-CKy31bWh.js} +32 -32
  13. package/dist/{chrome-DLbFTDQE.js → chrome-Ct9vb6SC.js} +12 -12
  14. package/dist/{command-queue-BSbitNdP.js → command-queue-AIWqKnVD.js} +1 -1
  15. package/dist/{command-queue-BijpV9rd.js → command-queue-CNStMA4Y.js} +1 -1
  16. package/dist/control-ui-v2/assets/{AgentsView-DVvw6PTU.js → AgentsView-3Qsr3xnf.js} +1 -1
  17. package/dist/control-ui-v2/assets/{AutomationsView-CxjmPRdI.js → AutomationsView-DkBzPKKQ.js} +1 -1
  18. package/dist/control-ui-v2/assets/Badge-CB5TWfdz.js +1 -0
  19. package/dist/control-ui-v2/assets/{Button-DL76WqX4.js → Button-CGdLofSY.js} +1 -1
  20. package/dist/control-ui-v2/assets/{ChannelsView-BDcVzQIM.js → ChannelsView-BRb8eYyh.js} +1 -1
  21. package/dist/control-ui-v2/assets/{ConfigForm-CbvOdyOA.js → ConfigForm-D8_bqW8x.js} +1 -1
  22. package/dist/control-ui-v2/assets/{ConfirmDialog-DGHQXUr5.js → ConfirmDialog-B7aotBjN.js} +1 -1
  23. package/dist/control-ui-v2/assets/{DataTable-lEkd1R85.js → DataTable-CSi930kO.js} +1 -1
  24. package/dist/control-ui-v2/assets/{DebugView-CHHmLv3x.js → DebugView-8cZqh6FQ.js} +1 -1
  25. package/dist/control-ui-v2/assets/{Dialog-rIrrCPSu.js → Dialog-CQE8Pvh6.js} +1 -1
  26. package/dist/control-ui-v2/assets/{DreamsView-uQSpm1S4.js → DreamsView-B0KzP2OM.js} +1 -1
  27. package/dist/control-ui-v2/assets/{EntityLink-AEBgCNQX.js → EntityLink-BO2oG3y8.js} +1 -1
  28. package/dist/control-ui-v2/assets/{FilterPills-HxAXXDO8.js → FilterPills-9pNaAyrL.js} +1 -1
  29. package/dist/control-ui-v2/assets/{InstancesView-Svk7C7AX.js → InstancesView-BbunCxYg.js} +1 -1
  30. package/dist/control-ui-v2/assets/{LearningView-CWqWycCM.js → LearningView-CEqD48Ll.js} +1 -1
  31. package/dist/control-ui-v2/assets/{LogsView-D7kaR6es.js → LogsView-fcI0vxkz.js} +1 -1
  32. package/dist/control-ui-v2/assets/{NodesView-CqKA1XAX.js → NodesView-BONHE7EP.js} +1 -1
  33. package/dist/control-ui-v2/assets/{OverviewView-Dz3YnxWP.js → OverviewView-BpynJnjy.js} +1 -1
  34. package/dist/control-ui-v2/assets/{Panel-CyfpswdJ.js → Panel-9wOynsWc.js} +1 -1
  35. package/dist/control-ui-v2/assets/{PluginMount-C1HeSpS9.js → PluginMount-6N20-nhI.js} +1 -1
  36. package/dist/control-ui-v2/assets/{PluginPageView-Dap5OwAt.js → PluginPageView-DZ3bh805.js} +1 -1
  37. package/dist/control-ui-v2/assets/{PluginPanels-DdDZQ_Dn.js → PluginPanels-DulRlgcm.js} +1 -1
  38. package/dist/control-ui-v2/assets/{RunsView-CQXkKsIZ.js → RunsView-dcBTwtFX.js} +1 -1
  39. package/dist/control-ui-v2/assets/{SessionsView-Bs9UqOQr.js → SessionsView-CZuTvckb.js} +1 -1
  40. package/dist/control-ui-v2/assets/{SettingsView-BhorzAw5.js → SettingsView-BTcubWvr.js} +1 -1
  41. package/dist/control-ui-v2/assets/{SkillsView-ClzUjPU-.js → SkillsView-Bj7lvW23.js} +1 -1
  42. package/dist/control-ui-v2/assets/{Stat-BruDi6qc.js → Stat-BZwg1PGE.js} +1 -1
  43. package/dist/control-ui-v2/assets/{StatusDot-Cij-6nH8.js → StatusDot-DHhJ1VpB.js} +1 -1
  44. package/dist/control-ui-v2/assets/{StorageView-BYgvfNcg.js → StorageView-B5cF1lld.js} +1 -1
  45. package/dist/control-ui-v2/assets/{UpdatedAgo-DWSnE4WG.js → UpdatedAgo-Dw3kxb2x.js} +1 -1
  46. package/dist/control-ui-v2/assets/{UsageView-C_ezU9jy.js → UsageView-DBZ1WkEI.js} +1 -1
  47. package/dist/control-ui-v2/assets/{config-store-27hOx1yp.js → config-store-XvvVJ8Fq.js} +1 -1
  48. package/dist/control-ui-v2/assets/{format-dlOOV12I.js → format-CGs6a1G6.js} +1 -1
  49. package/dist/control-ui-v2/assets/gateway-features-BZH74_Oc.js +1 -0
  50. package/dist/control-ui-v2/assets/{index-OijNknZs.js → index-BvXiY83i.js} +1 -1
  51. package/dist/control-ui-v2/assets/{links-C1sAzVEH.js → links-DlVrQOFC.js} +2 -2
  52. package/dist/control-ui-v2/assets/{run-rows-BYCIH1Sn.js → run-rows-Au2UUkD7.js} +1 -1
  53. package/dist/control-ui-v2/assets/{runs-store-DLIlHRM6.js → runs-store-DXgNPFWM.js} +1 -1
  54. package/dist/control-ui-v2/assets/{use-gateway-query-CF94JYnM.js → use-gateway-query-D25QZANO.js} +1 -1
  55. package/dist/control-ui-v2/index.html +7 -7
  56. package/dist/{deliver-CY4Fs4RX.js → deliver-DsuMPE0S.js} +28 -28
  57. package/dist/{deliver-xfGDp6XD.js → deliver-DxVojbH7.js} +6 -6
  58. package/dist/{diagnostic-S8OX1Eq2.js → diagnostic-C4pLNG6a.js} +1 -1
  59. package/dist/{diagnostic-BZYYYnMx.js → diagnostic-DJ11ZJIJ.js} +3 -3
  60. package/dist/{errors-BRYMqzPb.js → errors-0-at0aYV.js} +1 -1
  61. package/dist/extensionAPI.js +24 -24
  62. package/dist/{fences-Dtk43Q2a.js → fences-Z8d1dj8p.js} +16 -16
  63. package/dist/{fences-DbKcVN_n.js → fences-j5vzXLXf.js} +1 -1
  64. package/dist/{fetch-guard-UCuiKQ5E.js → fetch-guard-BQ-NMG7L.js} +2 -2
  65. package/dist/{fetch-guard-DuBGo4VE.js → fetch-guard-BaBd9ZVm.js} +2 -2
  66. package/dist/{frontmatter-DHBTRDiB.js → frontmatter-CzhUc9Ri.js} +5 -5
  67. package/dist/{fs-safe-Bk4Thq7a.js → fs-safe-Bd1xxVwv.js} +1 -1
  68. package/dist/{fs-safe-CyG0wflg.js → fs-safe-DMWtsz4J.js} +26 -26
  69. package/dist/{legacy-names-6uH6aLhq.js → legacy-names-chsmo2vs.js} +26 -26
  70. package/dist/llm-slug-generator.js +31 -31
  71. package/dist/{manager-BvLLls5L.js → manager-B4xc1xN6.js} +16 -16
  72. package/dist/{manager-Cf3W8LKj.js → manager-CD-sBxdS.js} +3 -3
  73. package/dist/{model-selection-Ca4WCV4n.js → model-selection-CYS--Nqz.js} +1 -1
  74. package/dist/{model-selection-CbMZx9fR.js → model-selection-Ds5bEVQ2.js} +82 -82
  75. package/dist/{nudge-DelcKR7z.js → nudge-CKFTN2YI.js} +9 -9
  76. package/dist/{nudge-Dd9wU1K5.js → nudge-DZuNGDE_.js} +32 -32
  77. package/dist/{outbound-attachment-CKATrxgO.js → outbound-attachment-BsEApkFu.js} +9 -9
  78. package/dist/{outbound-attachment-Btl5f-Lu.js → outbound-attachment-DHLTkCuI.js} +4 -4
  79. package/dist/{pi-embedded-ApthdT0k.js → pi-embedded-C8SqFziv.js} +40 -40
  80. package/dist/{pi-embedded-D-4wht-f.js → pi-embedded-yXKiYEGf.js} +229 -229
  81. package/dist/{pi-model-discovery-Dgbp4zjx.js → pi-model-discovery-CtfGh_up.js} +7 -7
  82. package/dist/{pi-model-discovery-D-D_mngz.js → pi-model-discovery-De5Z6lro.js} +1 -1
  83. package/dist/{proxy-env-v_oj7Urd.js → proxy-env-D4WYaw6X.js} +1 -1
  84. package/dist/{proxy-env-BRG1LWK1.js → proxy-env-DPCNy_X3.js} +1 -1
  85. package/dist/{pw-ai-BH-MmrGa.js → pw-ai-BmuDO1HM.js} +5 -5
  86. package/dist/{pw-ai-DK4N7_nV.js → pw-ai-ohfJZ9jX.js} +11 -11
  87. package/dist/{qmd-manager-Cdz2xlNp.js → qmd-manager-2dro3Ccn.js} +9 -9
  88. package/dist/{qmd-manager-NT_CKYQG.js → qmd-manager-CgZ9ng9u.js} +4 -4
  89. package/dist/{qmd-scope-CyWbQgiS.js → qmd-scope-DMUA3Vq9.js} +1 -1
  90. package/dist/{qmd-scope-hzI66flw.js → qmd-scope-RFd-g5Qi.js} +1 -1
  91. package/dist/{query-expansion-CPkdZdty.js → query-expansion-DQ8zm-TE.js} +1 -1
  92. package/dist/{query-expansion-feTsk3WF.js → query-expansion-GZKwviqQ.js} +13 -13
  93. package/dist/{recorder-DCGoPaKG.js → recorder-DA5NY6nl.js} +1 -1
  94. package/dist/{recorder-C3f7IlHZ.js → recorder-dKE74HOC.js} +2 -2
  95. package/dist/{redact-C4XKILzo.js → redact-LOuk7TRy.js} +1 -1
  96. package/dist/{reply-directives-BjV2MFIq.js → reply-directives-8FtYI79u.js} +9 -9
  97. package/dist/{reply-directives-ToqsETSh.js → reply-directives-CE9WoRyW.js} +49 -49
  98. package/dist/{runs-CPjMwHXQ.js → runs-BIabbRe5.js} +8 -8
  99. package/dist/{runs-D7qs08K3.js → runs-Dw8BeXyu.js} +5 -5
  100. package/dist/{send-BnVk7V-5.js → send-BQzswQlt.js} +5 -5
  101. package/dist/{send-DDBl5H1k.js → send-BTp_lz-m.js} +4 -4
  102. package/dist/{send-B9huC0Lk.js → send-CWcFiq7U.js} +3 -3
  103. package/dist/{send-Cj5zKV3M.js → send-DW_8PsC0.js} +4 -4
  104. package/dist/{sessions-zel35iDK.js → sessions-Bz8mUwgo.js} +5 -5
  105. package/dist/{sessions-CXuFR_IY.js → sessions-DKv9bCbi.js} +1 -1
  106. package/dist/{subsystem-DoQFckDJ.js → subsystem-cFv2jJm-.js} +71 -71
  107. package/dist/{tool-loop-detection-CtOkwPJY.js → tool-loop-detection-9fAxiikd.js} +2 -2
  108. package/dist/{user-run-recording-BVpLQDqe.js → user-run-recording-C1LRU5Lb.js} +2 -2
  109. package/dist/{user-run-recording-C10wwXyW.js → user-run-recording-CWRiZJsh.js} +1 -1
  110. package/dist/web-client/assets/{hast-util-from-dom-CvePVP6E.js → hast-util-from-dom-BoP9fB2c.js} +1 -1
  111. package/dist/web-client/assets/{hast-util-to-mdast-CwugKdbc.js → hast-util-to-mdast-Bo07nYTv.js} +1 -1
  112. package/dist/web-client/assets/{index-CFHLAWrp.js → index-CwqOe0fG.js} +2 -2
  113. package/dist/web-client/index.html +1 -1
  114. package/dist/{ws-2U5gNvRt.js → ws-Do6yaRWR.js} +1 -1
  115. package/dist/{ws-DrXm3NWZ.js → ws-Dt2EocLN.js} +1 -1
  116. package/extensions/a2a/package.json +1 -1
  117. package/extensions/acpx/package.json +1 -1
  118. package/extensions/anthropic/package.json +1 -1
  119. package/extensions/bifrost/package.json +1 -1
  120. package/extensions/bluebubbles/package.json +1 -1
  121. package/extensions/copilot-proxy/package.json +1 -1
  122. package/extensions/deepgram/package.json +1 -1
  123. package/extensions/deepinfra/package.json +1 -1
  124. package/extensions/diagnostics-otel/package.json +1 -1
  125. package/extensions/diffs/package.json +1 -1
  126. package/extensions/discord/package.json +1 -1
  127. package/extensions/dream-cycle/package.json +1 -1
  128. package/extensions/elevenlabs/package.json +1 -1
  129. package/extensions/feishu/package.json +1 -1
  130. package/extensions/gemini-search/package.json +1 -1
  131. package/extensions/google/package.json +1 -1
  132. package/extensions/google-gemini-cli-auth/package.json +1 -1
  133. package/extensions/googlechat/package.json +1 -1
  134. package/extensions/grok-search/package.json +1 -1
  135. package/extensions/groq/package.json +1 -1
  136. package/extensions/identity-oidc/package.json +1 -1
  137. package/extensions/imessage/package.json +1 -1
  138. package/extensions/irc/package.json +1 -1
  139. package/extensions/kimi-search/package.json +1 -1
  140. package/extensions/kokoro/package.json +1 -1
  141. package/extensions/learning-core/package.json +1 -1
  142. package/extensions/line/package.json +1 -1
  143. package/extensions/llm-task/package.json +1 -1
  144. package/extensions/lobster/package.json +1 -1
  145. package/extensions/matrix/CHANGELOG.md +1 -1
  146. package/extensions/matrix/package.json +1 -1
  147. package/extensions/mattermost/package.json +1 -1
  148. package/extensions/memory-core/package.json +1 -1
  149. package/extensions/memory-lancedb/package.json +1 -1
  150. package/extensions/minimax/package.json +1 -1
  151. package/extensions/minimax-portal-auth/package.json +1 -1
  152. package/extensions/mistral/package.json +1 -1
  153. package/extensions/moonshot/package.json +1 -1
  154. package/extensions/msteams/CHANGELOG.md +1 -1
  155. package/extensions/msteams/package.json +1 -1
  156. package/extensions/nextcloud-talk/package.json +1 -1
  157. package/extensions/nostr/CHANGELOG.md +1 -1
  158. package/extensions/nostr/package.json +1 -1
  159. package/extensions/open-prose/package.json +1 -1
  160. package/extensions/openai/package.json +1 -1
  161. package/extensions/openai-realtime/package.json +1 -1
  162. package/extensions/openrouter/package.json +1 -1
  163. package/extensions/perplexity-search/package.json +1 -1
  164. package/extensions/searxng-search/package.json +1 -1
  165. package/extensions/signal/package.json +1 -1
  166. package/extensions/slack/package.json +1 -1
  167. package/extensions/synology-chat/package.json +1 -1
  168. package/extensions/telegram/package.json +1 -1
  169. package/extensions/tlon/package.json +1 -1
  170. package/extensions/twitch/CHANGELOG.md +1 -1
  171. package/extensions/twitch/package.json +1 -1
  172. package/extensions/ui-surfaces/package.json +1 -1
  173. package/extensions/voice-call/CHANGELOG.md +1 -1
  174. package/extensions/voice-call/package.json +1 -1
  175. package/extensions/whatsapp/package.json +1 -1
  176. package/extensions/zai/package.json +1 -1
  177. package/extensions/zalo/CHANGELOG.md +1 -1
  178. package/extensions/zalo/package.json +1 -1
  179. package/extensions/zalouser/CHANGELOG.md +1 -1
  180. package/extensions/zalouser/package.json +1 -1
  181. package/package.json +1 -1
  182. package/dist/control-ui-v2/assets/Badge-4n2tRQ02.js +0 -1
  183. package/dist/control-ui-v2/assets/gateway-features-BIj6-KTX.js +0 -1
  184. package/dist/github-copilot-token-Bm6yG6tw.js +0 -106
  185. package/dist/paths-BIDPYPVC.js +0 -233
@@ -1,19 +1,19 @@
1
- import { V as loadConfig } from "./model-selection-CbMZx9fR.js";
2
- import { H as isPathInside, V as isNotFoundPathError, Z as CONFIG_DIR, mt as resolvePreferredOpenClawTmpDir, t as createSubsystemLogger } from "./subsystem-DoQFckDJ.js";
3
- import { n as isLoopbackAddress, r as isLoopbackHost, t as rawDataToString } from "./ws-DrXm3NWZ.js";
4
- import { i as openFileWithinRoot, t as SafeOpenError } from "./fs-safe-CyG0wflg.js";
5
- import { a as isErrno } from "./errors-BRYMqzPb.js";
6
- import { c as resolvePinnedHostnameWithPolicy, s as isPrivateNetworkAllowedByPolicy, t as hasProxyEnvConfigured } from "./proxy-env-v_oj7Urd.js";
1
+ import { V as loadConfig } from "./model-selection-Ds5bEVQ2.js";
2
+ import { H as isPathInside, V as isNotFoundPathError, Z as CONFIG_DIR, mt as resolvePreferredOpenClawTmpDir, t as createSubsystemLogger } from "./subsystem-cFv2jJm-.js";
3
+ import { n as isLoopbackAddress, r as isLoopbackHost, t as rawDataToString } from "./ws-Do6yaRWR.js";
4
+ import { i as openFileWithinRoot, t as SafeOpenError } from "./fs-safe-DMWtsz4J.js";
5
+ import { a as isErrno } from "./errors-0-at0aYV.js";
6
+ import { c as resolvePinnedHostnameWithPolicy, s as isPrivateNetworkAllowedByPolicy, t as hasProxyEnvConfigured } from "./proxy-env-D4WYaw6X.js";
7
7
  import path from "node:path";
8
- import fs from "node:fs";
8
+ import syncFs from "node:fs";
9
9
  import os from "node:os";
10
- import fs$1 from "node:fs/promises";
10
+ import fs from "node:fs/promises";
11
11
  import { execFileSync, spawn } from "node:child_process";
12
12
  import { createHmac } from "node:crypto";
13
13
  import net from "node:net";
14
14
  import http, { createServer } from "node:http";
15
15
  import https from "node:https";
16
- import WebSocket$1, { WebSocketServer } from "ws";
16
+ import WebSocket, { WebSocketServer } from "ws";
17
17
 
18
18
  //#region src/browser/constants.ts
19
19
  const DEFAULT_OPENCLAW_BROWSER_ENABLED = true;
@@ -66,28 +66,28 @@ function invalidPath(scopeLabel) {
66
66
  }
67
67
  async function resolveRealPathIfExists(targetPath) {
68
68
  try {
69
- return await fs$1.realpath(targetPath);
69
+ return await fs.realpath(targetPath);
70
70
  } catch {
71
71
  return;
72
72
  }
73
73
  }
74
74
  async function resolveTrustedRootRealPath(rootDir) {
75
75
  try {
76
- const rootLstat = await fs$1.lstat(rootDir);
76
+ const rootLstat = await fs.lstat(rootDir);
77
77
  if (!rootLstat.isDirectory() || rootLstat.isSymbolicLink()) return;
78
- return await fs$1.realpath(rootDir);
78
+ return await fs.realpath(rootDir);
79
79
  } catch {
80
80
  return;
81
81
  }
82
82
  }
83
83
  async function validateCanonicalPathWithinRoot(params) {
84
84
  try {
85
- const candidateLstat = await fs$1.lstat(params.candidatePath);
85
+ const candidateLstat = await fs.lstat(params.candidatePath);
86
86
  if (candidateLstat.isSymbolicLink()) return "invalid";
87
87
  if (params.expect === "directory" && !candidateLstat.isDirectory()) return "invalid";
88
88
  if (params.expect === "file" && !candidateLstat.isFile()) return "invalid";
89
89
  if (params.expect === "file" && candidateLstat.nlink > 1) return "invalid";
90
- const candidateRealPath = await fs$1.realpath(params.candidatePath);
90
+ const candidateRealPath = await fs.realpath(params.candidatePath);
91
91
  return isPathInside(params.rootRealPath, candidateRealPath) ? "ok" : "invalid";
92
92
  } catch (err) {
93
93
  return isNotFoundPathError(err) ? "not-found" : "invalid";
@@ -165,7 +165,7 @@ async function resolveCheckedPathsWithinRoot(params) {
165
165
  };
166
166
  if (!rootRealPath || !raw || !path.isAbsolute(raw)) return lexicalPathResult;
167
167
  try {
168
- const resolvedExistingPath = await fs$1.realpath(raw);
168
+ const resolvedExistingPath = await fs.realpath(raw);
169
169
  const relativePath = path.relative(rootRealPath, resolvedExistingPath);
170
170
  if (!isInRoot(relativePath)) return lexicalPathResult;
171
171
  return {
@@ -501,7 +501,7 @@ async function ensureChromeExtensionRelayServer(opts) {
501
501
  let extensionWs = null;
502
502
  const cdpClients = /* @__PURE__ */ new Set();
503
503
  const connectedTargets = /* @__PURE__ */ new Map();
504
- const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
504
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
505
505
  const hasConnectedTargets = () => connectedTargets.size > 0;
506
506
  let extensionDisconnectCleanupTimer = null;
507
507
  const extensionReconnectWaiters = /* @__PURE__ */ new Set();
@@ -553,7 +553,7 @@ async function ensureChromeExtensionRelayServer(opts) {
553
553
  let nextExtensionId = 1;
554
554
  const sendToExtension = async (payload) => {
555
555
  const ws = extensionWs;
556
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
556
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
557
557
  ws.send(JSON.stringify(payload));
558
558
  return await new Promise((resolve, reject) => {
559
559
  const timer = setTimeout(() => {
@@ -570,12 +570,12 @@ async function ensureChromeExtensionRelayServer(opts) {
570
570
  const broadcastToCdpClients = (evt) => {
571
571
  const msg = JSON.stringify(evt);
572
572
  for (const ws of cdpClients) {
573
- if (ws.readyState !== WebSocket$1.OPEN) continue;
573
+ if (ws.readyState !== WebSocket.OPEN) continue;
574
574
  ws.send(msg);
575
575
  }
576
576
  };
577
577
  const sendResponseToCdp = (ws, res) => {
578
- if (ws.readyState !== WebSocket$1.OPEN) return;
578
+ if (ws.readyState !== WebSocket.OPEN) return;
579
579
  ws.send(JSON.stringify(res));
580
580
  };
581
581
  const dropConnectedTargetSession = (sessionId) => {
@@ -829,7 +829,7 @@ async function ensureChromeExtensionRelayServer(opts) {
829
829
  rejectUpgrade(socket, 401, "Unauthorized");
830
830
  return;
831
831
  }
832
- if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
832
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
833
833
  try {
834
834
  extensionWs.terminate();
835
835
  } catch {}
@@ -862,7 +862,7 @@ async function ensureChromeExtensionRelayServer(opts) {
862
862
  clearExtensionDisconnectCleanupTimer();
863
863
  flushExtensionReconnectWaiters(true);
864
864
  const ping = setInterval(() => {
865
- if (ws.readyState !== WebSocket$1.OPEN) return;
865
+ if (ws.readyState !== WebSocket.OPEN) return;
866
866
  ws.send(JSON.stringify({ method: "ping" }));
867
867
  }, 5e3);
868
868
  ws.on("message", (data) => {
@@ -1218,7 +1218,7 @@ function openCdpWebSocket(wsUrl, opts) {
1218
1218
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
1219
1219
  const handshakeTimeoutMs = typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : CDP_WS_HANDSHAKE_TIMEOUT_MS;
1220
1220
  const agent = getDirectAgentForCdp(wsUrl);
1221
- return new WebSocket$1(wsUrl, {
1221
+ return new WebSocket(wsUrl, {
1222
1222
  handshakeTimeout: handshakeTimeoutMs,
1223
1223
  ...Object.keys(headers).length ? { headers } : {},
1224
1224
  ...agent ? { agent } : {}
@@ -1503,7 +1503,7 @@ const CHROMIUM_EXE_NAMES = new Set([
1503
1503
  ]);
1504
1504
  function exists$1(filePath) {
1505
1505
  try {
1506
- return fs.existsSync(filePath);
1506
+ return syncFs.existsSync(filePath);
1507
1507
  } catch {
1508
1508
  return false;
1509
1509
  }
@@ -1646,7 +1646,7 @@ function findDesktopFilePath(desktopId) {
1646
1646
  }
1647
1647
  function readDesktopExecLine(desktopPath) {
1648
1648
  try {
1649
- const lines = fs.readFileSync(desktopPath, "utf8").split(/\r?\n/);
1649
+ const lines = syncFs.readFileSync(desktopPath, "utf8").split(/\r?\n/);
1650
1650
  for (const line of lines) if (line.startsWith("Exec=")) return line.slice(5).trim();
1651
1651
  } catch {}
1652
1652
  return null;
@@ -1904,7 +1904,7 @@ function resolveBrowserExecutableForPlatform(resolved, platform) {
1904
1904
  const LSOF_CANDIDATES = process.platform === "darwin" ? ["/usr/sbin/lsof", "/usr/bin/lsof"] : ["/usr/bin/lsof", "/usr/sbin/lsof"];
1905
1905
  function resolveLsofCommandSync() {
1906
1906
  for (const candidate of LSOF_CANDIDATES) try {
1907
- fs.accessSync(candidate, fs.constants.X_OK);
1907
+ syncFs.accessSync(candidate, syncFs.constants.X_OK);
1908
1908
  return candidate;
1909
1909
  } catch {}
1910
1910
  return "lsof";
@@ -1949,8 +1949,8 @@ function decoratedMarkerPath(userDataDir) {
1949
1949
  }
1950
1950
  function safeReadJson(filePath) {
1951
1951
  try {
1952
- if (!fs.existsSync(filePath)) return null;
1953
- const raw = fs.readFileSync(filePath, "utf-8");
1952
+ if (!syncFs.existsSync(filePath)) return null;
1953
+ const raw = syncFs.readFileSync(filePath, "utf-8");
1954
1954
  const parsed = JSON.parse(raw);
1955
1955
  if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) return null;
1956
1956
  return parsed;
@@ -1959,8 +1959,8 @@ function safeReadJson(filePath) {
1959
1959
  }
1960
1960
  }
1961
1961
  function safeWriteJson(filePath, data) {
1962
- fs.mkdirSync(path.dirname(filePath), { recursive: true });
1963
- fs.writeFileSync(filePath, JSON.stringify(data, null, 2));
1962
+ syncFs.mkdirSync(path.dirname(filePath), { recursive: true });
1963
+ syncFs.writeFileSync(filePath, JSON.stringify(data, null, 2));
1964
1964
  }
1965
1965
  function setDeep(obj, keys, value) {
1966
1966
  let node = obj;
@@ -2087,7 +2087,7 @@ function decorateOpenClawProfile(userDataDir, opts) {
2087
2087
  }
2088
2088
  safeWriteJson(preferencesPath, prefs);
2089
2089
  try {
2090
- fs.writeFileSync(decoratedMarkerPath(userDataDir), `${Date.now()}\n`, "utf-8");
2090
+ syncFs.writeFileSync(decoratedMarkerPath(userDataDir), `${Date.now()}\n`, "utf-8");
2091
2091
  } catch {}
2092
2092
  }
2093
2093
  function ensureProfileCleanExit(userDataDir) {
@@ -2103,7 +2103,7 @@ function ensureProfileCleanExit(userDataDir) {
2103
2103
  const log = createSubsystemLogger("browser").child("chrome");
2104
2104
  function exists(filePath) {
2105
2105
  try {
2106
- return fs.existsSync(filePath);
2106
+ return syncFs.existsSync(filePath);
2107
2107
  } catch {
2108
2108
  return false;
2109
2109
  }
@@ -2201,7 +2201,7 @@ async function launchOpenClawChrome(resolved, profile) {
2201
2201
  const exe = resolveBrowserExecutable(resolved);
2202
2202
  if (!exe) throw new Error("No supported browser found (Chrome/Brave/Edge/Chromium on macOS, Linux, or Windows).");
2203
2203
  const userDataDir = resolveOpenClawUserDataDir(profile.name);
2204
- fs.mkdirSync(userDataDir, { recursive: true });
2204
+ syncFs.mkdirSync(userDataDir, { recursive: true });
2205
2205
  const needsDecorate = !isProfileDecorated(userDataDir, profile.name, (profile.color ?? DEFAULT_OPENCLAW_BROWSER_COLOR).toUpperCase());
2206
2206
  const spawnOnce = () => {
2207
2207
  const args = [
@@ -1,9 +1,9 @@
1
- import { V as loadConfig } from "./model-selection-Ca4WCV4n.js";
1
+ import { V as loadConfig } from "./model-selection-CYS--Nqz.js";
2
2
  import { H as isPathInside, V as isNotFoundPathError, Z as CONFIG_DIR, mt as resolvePreferredOpenClawTmpDir, t as createSubsystemLogger } from "./subsystem-DynBFcQj.js";
3
- import { n as isLoopbackAddress, r as isLoopbackHost, t as rawDataToString } from "./ws-2U5gNvRt.js";
4
- import { i as openFileWithinRoot, t as SafeOpenError } from "./fs-safe-Bk4Thq7a.js";
3
+ import { n as isLoopbackAddress, r as isLoopbackHost, t as rawDataToString } from "./ws-Dt2EocLN.js";
4
+ import { i as openFileWithinRoot, t as SafeOpenError } from "./fs-safe-Bd1xxVwv.js";
5
5
  import { a as isErrno } from "./errors-yyPKpoXR.js";
6
- import { c as resolvePinnedHostnameWithPolicy, s as isPrivateNetworkAllowedByPolicy, t as hasProxyEnvConfigured } from "./proxy-env-BRG1LWK1.js";
6
+ import { c as resolvePinnedHostnameWithPolicy, s as isPrivateNetworkAllowedByPolicy, t as hasProxyEnvConfigured } from "./proxy-env-DPCNy_X3.js";
7
7
  import path from "node:path";
8
8
  import syncFs from "node:fs";
9
9
  import os from "node:os";
@@ -13,7 +13,7 @@ import { createHmac } from "node:crypto";
13
13
  import net from "node:net";
14
14
  import http, { createServer } from "node:http";
15
15
  import https from "node:https";
16
- import WebSocket$1, { WebSocketServer } from "ws";
16
+ import WebSocket, { WebSocketServer } from "ws";
17
17
 
18
18
  //#region src/browser/constants.ts
19
19
  const DEFAULT_OPENCLAW_BROWSER_ENABLED = true;
@@ -501,7 +501,7 @@ async function ensureChromeExtensionRelayServer(opts) {
501
501
  let extensionWs = null;
502
502
  const cdpClients = /* @__PURE__ */ new Set();
503
503
  const connectedTargets = /* @__PURE__ */ new Map();
504
- const extensionConnected = () => extensionWs?.readyState === WebSocket$1.OPEN;
504
+ const extensionConnected = () => extensionWs?.readyState === WebSocket.OPEN;
505
505
  const hasConnectedTargets = () => connectedTargets.size > 0;
506
506
  let extensionDisconnectCleanupTimer = null;
507
507
  const extensionReconnectWaiters = /* @__PURE__ */ new Set();
@@ -553,7 +553,7 @@ async function ensureChromeExtensionRelayServer(opts) {
553
553
  let nextExtensionId = 1;
554
554
  const sendToExtension = async (payload) => {
555
555
  const ws = extensionWs;
556
- if (!ws || ws.readyState !== WebSocket$1.OPEN) throw new Error("Chrome extension not connected");
556
+ if (!ws || ws.readyState !== WebSocket.OPEN) throw new Error("Chrome extension not connected");
557
557
  ws.send(JSON.stringify(payload));
558
558
  return await new Promise((resolve, reject) => {
559
559
  const timer = setTimeout(() => {
@@ -570,12 +570,12 @@ async function ensureChromeExtensionRelayServer(opts) {
570
570
  const broadcastToCdpClients = (evt) => {
571
571
  const msg = JSON.stringify(evt);
572
572
  for (const ws of cdpClients) {
573
- if (ws.readyState !== WebSocket$1.OPEN) continue;
573
+ if (ws.readyState !== WebSocket.OPEN) continue;
574
574
  ws.send(msg);
575
575
  }
576
576
  };
577
577
  const sendResponseToCdp = (ws, res) => {
578
- if (ws.readyState !== WebSocket$1.OPEN) return;
578
+ if (ws.readyState !== WebSocket.OPEN) return;
579
579
  ws.send(JSON.stringify(res));
580
580
  };
581
581
  const dropConnectedTargetSession = (sessionId) => {
@@ -829,7 +829,7 @@ async function ensureChromeExtensionRelayServer(opts) {
829
829
  rejectUpgrade(socket, 401, "Unauthorized");
830
830
  return;
831
831
  }
832
- if (extensionWs && extensionWs.readyState !== WebSocket$1.OPEN) {
832
+ if (extensionWs && extensionWs.readyState !== WebSocket.OPEN) {
833
833
  try {
834
834
  extensionWs.terminate();
835
835
  } catch {}
@@ -862,7 +862,7 @@ async function ensureChromeExtensionRelayServer(opts) {
862
862
  clearExtensionDisconnectCleanupTimer();
863
863
  flushExtensionReconnectWaiters(true);
864
864
  const ping = setInterval(() => {
865
- if (ws.readyState !== WebSocket$1.OPEN) return;
865
+ if (ws.readyState !== WebSocket.OPEN) return;
866
866
  ws.send(JSON.stringify({ method: "ping" }));
867
867
  }, 5e3);
868
868
  ws.on("message", (data) => {
@@ -1218,7 +1218,7 @@ function openCdpWebSocket(wsUrl, opts) {
1218
1218
  const headers = getHeadersWithAuth(wsUrl, opts?.headers ?? {});
1219
1219
  const handshakeTimeoutMs = typeof opts?.handshakeTimeoutMs === "number" && Number.isFinite(opts.handshakeTimeoutMs) ? Math.max(1, Math.floor(opts.handshakeTimeoutMs)) : CDP_WS_HANDSHAKE_TIMEOUT_MS;
1220
1220
  const agent = getDirectAgentForCdp(wsUrl);
1221
- return new WebSocket$1(wsUrl, {
1221
+ return new WebSocket(wsUrl, {
1222
1222
  handshakeTimeout: handshakeTimeoutMs,
1223
1223
  ...Object.keys(headers).length ? { headers } : {},
1224
1224
  ...agent ? { agent } : {}
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { n as resolveProcessScopedMap } from "./plain-object-Doc_YkH1.js";
3
- import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-BZYYYnMx.js";
3
+ import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-DJ11ZJIJ.js";
4
4
  import { t as CommandLane } from "./lanes-D1Q3LLIs.js";
5
5
 
6
6
  //#region src/process/command-queue.ts
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-Cbj13DAv.js";
2
2
  import { n as resolveProcessScopedMap } from "./plain-object-Doc_YkH1.js";
3
- import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-S8OX1Eq2.js";
3
+ import { a as logLaneTaskCompleted, i as logLaneEnqueue, r as logLaneDequeue, t as diag } from "./diagnostic-C4pLNG6a.js";
4
4
  import { t as CommandLane } from "./lanes-DWpYhh13.js";
5
5
 
6
6
  //#region src/process/command-queue.ts
@@ -1 +1 @@
1
- import{_ as e,c as t,h as n,i as r,l as i,s as a,t as o}from"./format-dlOOV12I.js";import{n as s,o as c,t as l}from"./links-C1sAzVEH.js";import{t as u}from"./Button-DL76WqX4.js";import{t as d}from"./Dialog-rIrrCPSu.js";import{r as f}from"./config-store-27hOx1yp.js";import{n as p,t as m}from"./use-gateway-query-CF94JYnM.js";import{t as h}from"./Badge-4n2tRQ02.js";import{t as g}from"./Panel-CyfpswdJ.js";import{t as _}from"./EntityLink-AEBgCNQX.js";import{t as v}from"./Stat-BruDi6qc.js";import{a as y,i as b,n as x,r as S}from"./skills-model-DANiC-ui.js";var C=e(n(),1),w=t();function T({src:e,emoji:t,label:n,large:r=!1,testId:i}){let[a,o]=(0,C.useState)(!1),[s,c]=(0,C.useState)(e);e!==s&&(c(e),o(!1));let l=[`ct-agents__avatar`,r?`ct-agents__avatar--lg`:null].filter(Boolean).join(` `);return e&&!a?(0,w.jsx)(`img`,{className:l,src:e,alt:``,"data-testid":i?`${i}-img`:void 0,onError:()=>o(!0)}):(0,w.jsx)(`span`,{className:l,"data-testid":i?`${i}-fallback`:void 0,"aria-hidden":`true`,children:t||n.slice(0,1).toUpperCase()})}function E(e){if(!e)return`-`;if(typeof e==`string`)return e.trim()||`-`;let t=P(e);if(!t)return`-`;let n=typeof t.primary==`string`?t.primary.trim():``;if(!n)return`-`;let r=Array.isArray(t.fallbacks)?t.fallbacks.length:0;return r>0?`${n} (+${r} fallback)`:n}function D(e){let t=e.match(/^(.+) \(\+\d+ fallback\)$/);return t?t[1]:e}function O(e){if(!e)return null;if(typeof e==`string`)return e.trim()||null;let t=P(e);return t&&(typeof t.primary==`string`?t.primary:typeof t.model==`string`?t.model:typeof t.id==`string`?t.id:typeof t.value==`string`?t.value:null)?.trim()||null}function k(e){let t=P(e);if(!t)return null;let n=Array.isArray(t.fallbacks)?t.fallbacks:Array.isArray(t.fallback)?t.fallback:null;return n?n.filter(e=>typeof e==`string`):null}function A(e,t){return k(e)??k(t)}function j(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function M(e,t){let n=(e||null)?.agents?.defaults?.models,r=[];if(n&&typeof n==`object`)for(let[e,t]of Object.entries(n)){let n=e.trim();if(!n)continue;let i=t?.alias?.trim(),a=i&&i!==n?`${i} (${n})`:n;r.push({value:n,label:a})}let i=t?r.some(e=>e.value===t):!1;return t&&!i&&r.unshift({value:t,label:`Current (${t})`}),r.length===0?[{value:``,label:`No configured models`,disabled:!0}]:r}function N(e){let t=new Map;for(let n of e){let e=n.team?.id??null,r=e??`\0`,i=t.get(r);i||(i={teamId:e,title:e===null?null:n.team?.name??e,agents:[]},t.set(r,i)),n.team?.role===`lead`?(e!==null&&n.team?.name&&(i.title=n.team.name),i.agents.unshift(n)):i.agents.push(n)}return[...t.values()].toSorted((e,t)=>e.teamId===null?1:t.teamId===null?-1:0)}function P(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function F(e){let t=P(e);return t&&typeof t.id==`string`?t.id:null}function I(e){return e.name?.trim()||e.identity?.name?.trim()||e.id}function L(e){let t=e.trim();if(!t||t.length>16)return!1;let n=!1;for(let e=0;e<t.length;e+=1)if(t.charCodeAt(e)>127){n=!0;break}return n?!t.includes(`://`)&&!t.includes(`/`)&&!t.includes(`.`):!1}function R(e,t){let n=t?.emoji?.trim();if(n&&L(n))return n;let r=e.identity?.emoji?.trim();if(r&&L(r))return r;let i=t?.avatar?.trim();if(i&&L(i))return i;let a=e.identity?.avatar?.trim();return a&&L(a)?a:``}function z(e,t){let n=[t?.avatar,e.identity?.avatarUrl,e.identity?.avatar];for(let e of n){let t=e?.trim();if(t&&!L(t))return t}return null}function ee(e,t){return t&&e===t?`default`:null}function te(e){if(e==null||!Number.isFinite(e))return`-`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(+(n<10))} ${t[r]}`}function B(e,t){let n=e||null;return{entry:(n?.agents?.list??[]).find(e=>F(e)===t)??null,defaults:n?.agents?.defaults??null}}function V(e,t){let n=e?e.agents?.list:void 0;return Array.isArray(n)?n.findIndex(e=>F(e)===t):-1}function ne(e){let{agent:t,config:n,filesWorkspace:r,defaultId:i,agentIdentity:a}=e,o=B(n,t.id),s=r||o.entry?.workspace||o.defaults?.workspace||`default`,c=o.entry?.model?E(o.entry?.model):E(o.defaults?.model),l=a?.name?.trim()||t.identity?.name?.trim()||t.name?.trim()||o.entry?.name||t.id,u=R(t,a)||`-`,d=Array.isArray(o.entry?.skills)?o.entry?.skills:null,f=d?.length??null;return{workspace:s,model:c,identityName:l,identityEmoji:u,skillsLabel:d?`${f} selected`:`all skills`,isDefault:!!(i&&t.id===i)}}function re(e,t){if(!e)return null;let n=P(e.channels)?.[t];return P(n)??P(e[t])}function ie(e){if(e==null)return`n/a`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return`n/a`}}function ae(e){let t=re(e.configForm,e.channelId);return t?e.fields.flatMap(e=>e in t?[{label:e,value:ie(t[e])}]:[]):[]}function oe(e){let t=e/6e4;if(t<60)return`${Math.round(t)}m`;let n=t/60;return n<24?`${Math.round(n*10)/10}h`:`${Math.round(n/24*10)/10}d`}function se(e){let t=e.schedule;if(t.kind===`at`){let e=Date.parse(t.at);return Number.isFinite(e)?`At ${new Date(e).toLocaleString()}`:`At ${t.at}`}return t.kind===`every`?`Every ${oe(t.everyMs)}`:`Cron ${t.expr}${t.tz?` (${t.tz})`:``}`}function ce(e){let t=e.payload;if(t.kind===`systemEvent`)return`System: ${t.text}`;if(t.kind===`wakeGate`){let e=t.gate.kind===`command`?t.gate.command:t.gate.model;return`Wake gate: ${t.gate.kind} (${e??`model`})`}return`Agent: ${t.message}`}var le=[`groupPolicy`,`streamMode`,`dmPolicy`];function ue(e,t){return e.channelMeta?.find(e=>e.id===t)?.label||e.channelLabels[t]||t}function de(e){if(!e)return[];let t=new Set;for(let n of e.channelOrder??[])t.add(n);for(let n of e.channelMeta??[])t.add(n.id);for(let n of Object.keys(e.channelAccounts??{}))t.add(n);let n=[],r=e.channelOrder?.length?e.channelOrder:Array.from(t);for(let e of r)t.has(e)&&(n.push(e),t.delete(e));for(let e of t)n.push(e);return n.map(t=>({id:t,label:ue(e,t),accounts:e.channelAccounts?.[t]??[]}))}function fe(e){let t=0,n=0,r=0;for(let i of e){let e=i.probe&&typeof i.probe==`object`&&`ok`in i.probe?!!i.probe.ok:!1;(i.connected===!0||i.running===!0||e)&&(t+=1),i.configured&&(n+=1),i.enabled&&(r+=1)}return{total:e.length,connected:t,configured:n,enabled:r}}function pe({context:e}){let t=p(`channels.status`,{probe:!1},{refreshMs:m}),n=he(),i=de(t.data),o=t.data?.ts??null;return(0,w.jsxs)(`div`,{"data-testid":`agent-channels`,children:[(0,w.jsx)(me,{context:e,subtitle:`Workspace, identity, and model configuration.`}),(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Channels`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Gateway-wide channel status snapshot.`}),(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub`,children:[`Last refresh: `,o?r(o):`never`]})]}),(0,w.jsx)(u,{size:`sm`,disabled:t.loading,onClick:t.reload,children:t.loading?`Refreshing…`:`Refresh`})]}),t.error?(0,w.jsx)(a,{tone:`error`,message:t.error}):null,t.loading&&!t.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading channels…`}):null,t.data&&i.length===0?(0,w.jsx)(a,{message:`No channels found.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__channel-list`,children:i.map(e=>{let t=fe(e.accounts),r=t.total?`${t.connected}/${t.total} connected`:`no accounts`,i=t.configured?`${t.configured} configured`:`not configured`,a=t.total?`${t.enabled} enabled`:`disabled`,o=ae({configForm:n,channelId:e.id,fields:le});return(0,w.jsxs)(`div`,{className:`ct-agents__channel-row`,"data-testid":`agent-channel-${e.id}`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`ct-agents__channel-label`,children:e.label}),(0,w.jsx)(`div`,{className:`ct-agents__channel-id ct-mono`,children:e.id})]}),(0,w.jsxs)(`div`,{className:`ct-agents__channel-meta`,children:[(0,w.jsx)(`span`,{children:r}),(0,w.jsx)(`span`,{children:i}),(0,w.jsx)(`span`,{children:a}),o.map(e=>(0,w.jsxs)(`span`,{children:[e.label,`: `,e.value]},e.label))]})]},e.id)})})]})}function me({context:e,subtitle:t}){let n=[[`Workspace`,e.workspace],[`Primary model`,e.model],[`Identity name`,e.identityName],[`Identity emoji`,e.identityEmoji],[`Skills filter`,e.skillsLabel],[`Default`,e.isDefault?`yes`:`no`]];return(0,w.jsxs)(`div`,{className:`ct-agents__context-card`,"data-testid":`agent-context-card`,children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Agent context`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:t}),(0,w.jsx)(`div`,{className:`ct-agents__kv-grid`,children:n.map(([e,t])=>(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:e}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value`,children:t})]},e))})]})}function he(){let e=f(e=>e.draft),t=f(e=>e.snapshot?.config??null);return e??t}var ge={includeDisabled:!0,limit:200,offset:0,sortBy:`nextRunAtMs`,sortDir:`asc`},_e=50;function ve(e){let t=i(e=>e.request),[n,r]=(0,C.useState)({jobs:[],loading:!1,error:null});return(0,C.useEffect)(()=>{if(!e||e.hasMore!==!0){r(e=>e.jobs.length===0&&!e.loading&&e.error===null?e:{jobs:[],loading:!1,error:null});return}let n=!1;return r(e=>({jobs:e.jobs,loading:!0,error:null})),(async()=>{let i=[],a=e.nextOffset??200;for(let e=0;e<_e;e+=1)try{let e=await t(`cron.list`,{...ge,offset:a});if(n)return;let r=e.jobs??[];if(i.push(...r),e.hasMore!==!0||r.length===0)break;a=e.nextOffset??a+r.length}catch(e){n||r({jobs:i,loading:!1,error:o(e)});return}n||r({jobs:i,loading:!1,error:null})})(),()=>{n=!0}},[e,t]),n}function ye({agentId:e,context:t}){let n=p(`cron.status`,{},{refreshMs:m}),i=p(`cron.list`,ge,{refreshMs:m}),o=ve(i.data),c=(0,C.useMemo)(()=>[...i.data?.jobs??[],...o.jobs].filter(t=>t.agentId===e),[i.data,o.jobs,e]),d=i.error??o.error;return(0,w.jsxs)(`div`,{"data-testid":`agent-cron`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__cron-top`,children:[(0,w.jsx)(me,{context:t,subtitle:`Workspace and scheduling targets.`}),(0,w.jsxs)(`div`,{className:`ct-agents__context-card`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Scheduler`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Gateway cron status.`})]}),(0,w.jsx)(u,{size:`sm`,disabled:n.loading,onClick:()=>{n.reload(),i.reload()},children:`Refresh`})]}),(0,w.jsxs)(`div`,{className:`ct-agents__stats`,children:[(0,w.jsx)(v,{label:`Enabled`,value:n.data?n.data.enabled?`Yes`:`No`:`n/a`}),(0,w.jsx)(v,{label:`Jobs`,value:n.data?.jobs??`n/a`}),(0,w.jsx)(v,{label:`Next wake`,value:r(n.data?.nextWakeAtMs??null)})]}),n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null]})]}),(0,w.jsx)(`div`,{className:`ct-agents__panel-head`,children:(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Agent cron jobs`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Scheduled jobs targeting this agent.`})]})}),d?(0,w.jsx)(a,{tone:`error`,message:d}):null,i.loading&&!i.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading jobs…`}):null,i.data&&!o.loading&&c.length===0?(0,w.jsx)(a,{message:`No jobs assigned.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__cron-list`,children:c.map(e=>(0,w.jsxs)(`div`,{className:`ct-agents__cron-row`,"data-testid":`agent-cron-job-${e.id}`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__cron-main`,children:[(0,w.jsx)(`span`,{className:`ct-agents__channel-label`,children:e.name}),e.description?(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:e.description}):null,(0,w.jsxs)(`span`,{className:`ct-agents__chip-row`,children:[(0,w.jsx)(h,{children:se(e)}),(0,w.jsx)(h,{tone:e.enabled?`ok`:`warn`,children:e.enabled?`enabled`:`disabled`}),(0,w.jsx)(h,{children:e.sessionTarget})]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__cron-meta`,children:[(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,children:[`Last `,r(e.state?.lastRunAtMs),` · Next`,` `,r(e.state?.nextRunAtMs)]}),(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:ce(e)}),(0,w.jsx)(u,{size:`sm`,"data-testid":`agent-cron-open-${e.id}`,onClick:()=>l(s.automation(e.id)),children:`Open in Automations`})]})]},e.id))})]})}function be({agentId:e}){let t=i(e=>e.request),n=p(`agents.files.list`,{agentId:e}),[r,s]=(0,C.useState)({}),[c,l]=(0,C.useState)({}),[d,f]=(0,C.useState)(null),[m,h]=(0,C.useState)(!1),[g,_]=(0,C.useState)(null),v=(0,C.useRef)({}),y=n.data?.agentId===e?n.data.files??[]:[],b=d?y.find(e=>e.name===d)??null:null,x=d?r[d]??``:``,S=d?Object.hasOwn(r,d):!1,T=d?c[d]??x:``,E=d?T!==x:!1,D=(e,t)=>{v.current={...v.current,[e]:t},s(v.current)};(0,C.useEffect)(()=>{d&&y.length>0&&!y.some(e=>e.name===d)&&f(null)},[d,y]),(0,C.useEffect)(()=>{if(!d||Object.hasOwn(v.current,d))return;let n=!1,r=d;return t(`agents.files.get`,{agentId:e,name:r}).then(e=>{n||!e?.file||(D(r,e.file.content??``),l(t=>({...t,[r]:e.file.content??``})))}).catch(e=>{n||_(o(e))}),()=>{n=!0}},[d,e,t]);let O=async()=>{if(!d||!E||m)return;let i=d,a=c[i]??r[i]??``;h(!0),_(null);try{(await t(`agents.files.set`,{agentId:e,name:i,content:a}))?.file&&(D(i,a),l(e=>({...e,[i]:a})),n.reload())}catch(e){_(o(e))}finally{h(!1)}};return(0,w.jsxs)(`div`,{"data-testid":`agent-files`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Core files`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Bootstrap persona, identity, and tool guidance.`}),n.data?.agentId===e?(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub ct-mono`,children:[`Workspace: `,n.data.workspace]}):null]}),(0,w.jsx)(u,{size:`sm`,disabled:n.loading,"data-testid":`agent-files-refresh`,onClick:n.reload,children:n.loading?`Loading…`:`Refresh`})]}),n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null,n.loading&&!n.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading files…`}):null,g?(0,w.jsx)(`div`,{role:`alert`,className:`ct-agents__callout ct-agents__callout--danger`,"data-testid":`agent-files-error`,children:g}):null,n.data?y.length===0?(0,w.jsx)(a,{message:`No files found.`}):(0,w.jsxs)(`div`,{className:`ct-agents__files-grid`,children:[(0,w.jsx)(`div`,{className:`ct-agents__files-list`,"data-testid":`agent-files-list`,children:y.map(e=>(0,w.jsx)(xe,{file:e,active:d===e.name,onSelect:()=>f(e.name)},e.name))}),(0,w.jsx)(`div`,{className:`ct-agents__files-editor`,children:b?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`ct-agents__file-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`ct-agents__file-name ct-mono`,children:b.name}),(0,w.jsx)(`div`,{className:`ct-agents__file-path ct-mono`,children:b.path})]}),(0,w.jsxs)(`div`,{className:`ct-agents__file-actions`,children:[(0,w.jsx)(u,{size:`sm`,disabled:!E,"data-testid":`agent-file-reset`,onClick:()=>l(e=>({...e,[b.name]:x})),children:`Reset`}),(0,w.jsx)(u,{size:`sm`,variant:`primary`,disabled:m||!E,"data-testid":`agent-file-save`,onClick:()=>void O(),children:m?`Saving…`:`Save`})]})]}),b.missing?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`This file is missing. Saving will create it in the agent workspace.`}):null,(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsx)(`span`,{children:`Content`}),(0,w.jsx)(`textarea`,{"data-testid":`agent-file-editor`,rows:16,value:T,disabled:!S,placeholder:S?void 0:`Loading…`,onChange:e=>l(t=>({...t,[b.name]:e.target.value}))})]})]}):(0,w.jsx)(a,{message:`Select a file to edit.`})})]}):null]})}function xe({file:e,active:t,onSelect:n}){let i=e.missing?`Missing`:`${te(e.size)} · ${r(e.updatedAtMs??null)}`;return(0,w.jsxs)(`button`,{type:`button`,className:`ct-agents__file-row${t?` ct-agents__file-row--active`:``}`,"data-testid":`agent-file-${e.name}`,onClick:n,children:[(0,w.jsxs)(`span`,{className:`ct-agents__file-row-main`,children:[(0,w.jsx)(`span`,{className:`ct-agents__file-row-name ct-mono`,children:e.name}),(0,w.jsx)(`span`,{className:`ct-agents__file-row-meta`,children:i})]}),e.missing?(0,w.jsx)(`span`,{className:`ct-agents__pill ct-agents__pill--warn`,children:`missing`}):null]})}function H({testId:e,onBeforeSave:t}){let n=f(e=>e.dirty),r=f(e=>e.busy),i=f(e=>e.error),a=f(e=>e.snapshot!==null),o=async()=>{t?.(),await f.getState().save(`set`)};return(0,w.jsxs)(`div`,{className:`ct-agents__config-actions`,children:[i?(0,w.jsxs)(`div`,{className:`ct-agents__config-error`,role:`alert`,"data-testid":`${e}-error`,children:[(0,w.jsx)(`span`,{children:i}),(0,w.jsx)(u,{size:`sm`,"data-testid":`${e}-error-reload`,onClick:()=>void f.getState().load(),children:`Reload from gateway`})]}):null,(0,w.jsxs)(`div`,{className:`ct-agents__config-buttons`,children:[(0,w.jsx)(`span`,{className:`ct-agents__config-state`,"data-testid":`${e}-state`,children:a?n?`unsaved`:`saved`:`Config not loaded`}),(0,w.jsx)(u,{size:`sm`,disabled:r,"data-testid":`${e}-reload`,onClick:()=>void f.getState().load(),children:`Reload Config`}),(0,w.jsx)(u,{size:`sm`,variant:`primary`,disabled:r||!n,"data-testid":`${e}-save`,onClick:()=>void o(),children:r?`Saving…`:`Save`})]})]})}function Se(e){return e&&typeof e==`object`&&!Array.isArray(e)?`primary`in e&&typeof e.primary==`string`&&e.primary.trim()||null:typeof e==`string`&&e.trim()||null}function Ce(e,t,n,r,i){let a=V(e,t);if(a<0)return;let o=[`agents`,`list`,a,`model`];if(!n){i(o);return}let s=B(e,t).entry?.model;if(s&&typeof s==`object`&&!Array.isArray(s)){let e=k(s);r(o,{primary:n,...e?{fallbacks:e}:{}});return}r(o,n)}function we(e,t,n,r,i){let a=V(e,t);if(a<0)return;let o=[`agents`,`list`,a,`model`],s=Se(B(e,t).entry?.model);if(n.length===0){s?r(o,s):i(o);return}r(o,s?{primary:s,fallbacks:n}:{fallbacks:n})}function Te({agent:e,defaultId:t,identity:n,identityLoading:r,identityError:i}){let a=f(e=>e.draft),o=f(e=>e.snapshot?.config??null),s=f(e=>e.busy),c=f(e=>e.schema!==null),l=a??o,u=B(l,e.id),d=u.entry?.workspace||u.defaults?.workspace||`default`,p=u.entry?.model?E(u.entry.model):E(u.defaults?.model),m=E(u.defaults?.model),h=O(u.entry?.model)??(p===`-`?null:D(p))??O(u.defaults?.model)??(m===`-`?null:D(m)),g=A(u.entry?.model,u.defaults?.model),_=g?g.join(`, `):``,[v,y]=(0,C.useState)(null);(0,C.useEffect)(()=>{y(null)},[_]);let b=v??_,x=n?.name?.trim()||e.identity?.name?.trim()||e.name?.trim()||u.entry?.name||`-`,S=R(e,n)||`-`,T=Array.isArray(u.entry?.skills)?u.entry?.skills:null,k=r?`Loading…`:i?`Unavailable`:``,N=!!(t&&e.id===t),P=ne({agent:e,config:l,filesWorkspace:null,defaultId:t,agentIdentity:n}),F=!!l&&c&&!s,I=(e,t)=>f.getState().setPath(e,t),L=e=>f.getState().removePath(e),z=()=>{if(v===null||v===_){y(null);return}y(null),we(l,e.id,j(v),I,L)};return(0,w.jsxs)(`div`,{"data-testid":`agent-overview`,children:[(0,w.jsx)(`div`,{className:`ct-agents__kv-grid`,children:[[`Workspace`,d],[`Primary model`,p],[`Identity name`,x,k||void 0],[`Default`,N?`yes`:`no`],[`Identity emoji`,S],[`Skills filter`,T?`${T.length} selected`:`all skills`]].map(([e,t,n])=>(0,w.jsxs)(`div`,{className:`ct-agents__kv`,"data-testid":`agent-kv-${e.toLowerCase().replace(/\s+/g,`-`)}`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:e}),(0,w.jsx)(`span`,{className:e===`Workspace`?`ct-agents__kv-value ct-mono`:`ct-agents__kv-value`,children:t}),n?(0,w.jsx)(`span`,{className:`ct-agents__kv-note`,children:n}):null]},e))}),(0,w.jsxs)(`div`,{className:`ct-agents__model-edit`,"data-testid":`agent-model-edit`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Model selection`}),(0,w.jsxs)(`div`,{className:`ct-agents__model-fields`,children:[(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsxs)(`span`,{children:[`Primary model`,N?` (default)`:``]}),(0,w.jsxs)(`select`,{"data-testid":`agent-model-select`,value:h??``,disabled:!F,onChange:t=>Ce(l,e.id,t.target.value||null,I,L),children:[N?null:(0,w.jsx)(`option`,{value:``,children:m===`-`?`Inherit default`:`Inherit default (${m})`}),M(l,h).map(e=>(0,w.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]})]}),(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsx)(`span`,{children:`Fallbacks (comma-separated)`}),(0,w.jsx)(`input`,{"data-testid":`agent-fallbacks-input`,value:b,disabled:!F,placeholder:`provider/model, provider/model`,onChange:e=>y(e.target.value),onBlur:z})]})]}),(0,w.jsx)(H,{testId:`agent-config`,onBeforeSave:z})]}),(0,w.jsxs)(`p`,{className:`ct-agents__hint`,children:[`Routing context: `,P.model===`-`?`model unset`:P.model,`,`,` `,P.skillsLabel,`.`]})]})}var Ee=[{id:`fs`,label:`Files`},{id:`runtime`,label:`Runtime`},{id:`web`,label:`Web`},{id:`memory`,label:`Memory`},{id:`sessions`,label:`Sessions`},{id:`ui`,label:`UI`},{id:`messaging`,label:`Messaging`},{id:`automation`,label:`Automation`},{id:`nodes`,label:`Nodes`},{id:`agents`,label:`Agents`},{id:`media`,label:`Media`}],U=[{id:`read`,label:`read`,description:`Read file contents`,sectionId:`fs`,profiles:[`coding`]},{id:`write`,label:`write`,description:`Create or overwrite files`,sectionId:`fs`,profiles:[`coding`]},{id:`edit`,label:`edit`,description:`Make precise edits`,sectionId:`fs`,profiles:[`coding`]},{id:`delete`,label:`delete`,description:`Delete a workspace file`,sectionId:`fs`,profiles:[`coding`]},{id:`apply_patch`,label:`apply_patch`,description:`Patch files (OpenAI)`,sectionId:`fs`,profiles:[`coding`]},{id:`exec`,label:`exec`,description:`Run shell commands`,sectionId:`runtime`,profiles:[`coding`]},{id:`process`,label:`process`,description:`Manage background processes`,sectionId:`runtime`,profiles:[`coding`]},{id:`web_search`,label:`web_search`,description:`Search the web`,sectionId:`web`,profiles:[],includeInOpenClawGroup:!0},{id:`web_fetch`,label:`web_fetch`,description:`Fetch web content`,sectionId:`web`,profiles:[],includeInOpenClawGroup:!0},{id:`memory_search`,label:`memory_search`,description:`Semantic search`,sectionId:`memory`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`memory_get`,label:`memory_get`,description:`Read memory files`,sectionId:`memory`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`sessions_list`,label:`sessions_list`,description:`List sessions`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_history`,label:`sessions_history`,description:`Session history`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_send`,label:`sessions_send`,description:`Send to session`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`agents_nudge`,label:`agents_nudge`,description:`Wake another agent`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_spawn`,label:`sessions_spawn`,description:`Spawn sub-agent`,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`subagents`,label:`subagents`,description:`Manage sub-agents`,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`session_status`,label:`session_status`,description:`Session status`,sectionId:`sessions`,profiles:[`minimal`,`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`browser`,label:`browser`,description:`Control web browser`,sectionId:`ui`,profiles:[],includeInOpenClawGroup:!0},{id:`canvas`,label:`canvas`,description:`Control canvases`,sectionId:`ui`,profiles:[],includeInOpenClawGroup:!0},{id:`message`,label:`message`,description:`Send messages`,sectionId:`messaging`,profiles:[`messaging`],includeInOpenClawGroup:!0},{id:`cron`,label:`cron`,description:`Schedule tasks`,sectionId:`automation`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`gateway`,label:`gateway`,description:`Gateway control`,sectionId:`automation`,profiles:[],includeInOpenClawGroup:!0},{id:`nodes`,label:`nodes`,description:`Nodes + devices`,sectionId:`nodes`,profiles:[],includeInOpenClawGroup:!0},{id:`agents_list`,label:`agents_list`,description:`List agents`,sectionId:`agents`,profiles:[],includeInOpenClawGroup:!0},{id:`image`,label:`image`,description:`Image understanding`,sectionId:`media`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`tts`,label:`tts`,description:`Text-to-speech conversion`,sectionId:`media`,profiles:[],includeInOpenClawGroup:!0}];new Map(U.map(e=>[e.id,e]));function W(e){return U.filter(t=>t.profiles.includes(e)).map(e=>e.id)}var De={minimal:{allow:W(`minimal`)},coding:{allow:W(`coding`)},messaging:{allow:W(`messaging`)},full:{}};function Oe(){let e=new Map;for(let t of U){let n=`group:${t.sectionId}`,r=e.get(n)??[];r.push(t.id),e.set(n,r)}return{"group:openclaw":U.filter(e=>e.includeInOpenClawGroup).map(e=>e.id),...Object.fromEntries(e.entries())}}var ke=Oe(),Ae=[{id:`minimal`,label:`Minimal`},{id:`coding`,label:`Coding`},{id:`messaging`,label:`Messaging`},{id:`full`,label:`Full`}];function je(e){if(!e)return;let t=De[e];if(t&&!(!t.allow&&!t.deny))return{allow:t.allow?[...t.allow]:void 0,deny:t.deny?[...t.deny]:void 0}}function Me(){return Ee.map(e=>({id:e.id,label:e.label,tools:U.filter(t=>t.sectionId===e.id).map(e=>({id:e.id,label:e.label,description:e.description}))})).filter(e=>e.tools.length>0)}var Ne={bash:`exec`,"apply-patch":`apply_patch`},Pe={...ke};function G(e){let t=e.trim().toLowerCase();return Ne[t]??t}function Fe(e){return e?e.map(G).filter(Boolean):[]}function Ie(e){let t=Fe(e),n=[];for(let e of t){let t=Pe[e];if(t){n.push(...t);continue}n.push(e)}return Array.from(new Set(n))}function Le(e){return je(e)}var Re=Me().map(e=>({id:e.id,label:e.label,source:`core`,tools:e.tools.map(e=>({...e,source:`core`,defaultProfiles:[]}))})),ze=Ae.map(e=>({...e}));function Be(e){return(e?e.tools:void 0)??{}}function Ve(e){let t=G(e);if(!t)return{kind:`exact`,value:``};if(t===`*`)return{kind:`all`};if(!t.includes(`*`))return{kind:`exact`,value:t};let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return{kind:`regex`,value:RegExp(`^${n.replaceAll(`\\*`,`.*`)}$`)}}function K(e){return Array.isArray(e)?Ie(e).map(Ve).filter(e=>e.kind!==`exact`||e.value.length>0):[]}function q(e,t){for(let n of t)if(n.kind===`all`||n.kind===`exact`&&e===n.value||n.kind===`regex`&&n.value.test(e))return!0;return!1}function He(e,t){if(!t)return!0;let n=G(e);if(q(n,K(t.deny)))return!1;let r=K(t.allow);return r.length===0||q(n,r)?!0:n===`apply_patch`&&q(`exec`,r)}function J(e,t){if(!Array.isArray(t)||t.length===0)return!1;let n=G(e),r=K(t);return q(n,r)?!0:n===`apply_patch`&&q(`exec`,r)}function Ue(e){return Le(e)??void 0}function Y(e,t,n){let r=He(e,t),i=J(e,n.alsoAllow),a=J(e,n.deny);return{allowed:(r||i)&&!a,baseAllowed:r,denied:a}}function We(e){return e.map(e=>G(e)).filter(e=>e.length>0)}function Ge(e){let t=new Set(We(e.current.alsoAllow)),n=new Set(We(e.current.deny));for(let r of e.toggles){let i=G(r.toolId);i&&(r.enable?(n.delete(i),e.baseAllowed(i)||t.add(i)):(t.delete(i),n.add(i)))}return{alsoAllow:[...t],deny:[...n]}}function Ke(e){let t=e.current?e.current.map(e=>e.trim()).filter(Boolean):null,n=new Set(t??e.allSkills),r=e.skillName.trim();return e.enable?n.add(r):n.delete(r),[...n]}function qe({agent:e}){let t=e.id,n=p(`skills.status`,{agentId:t},{refreshMs:m}),r=f(e=>e.draft),i=f(e=>e.snapshot?.config??null),o=f(e=>e.busy),s=f(e=>e.schema!==null),[c,l]=(0,C.useState)(``),d=r??i,h=B(d,t),g=Array.isArray(h.entry?.skills)?h.entry.skills:void 0,_=new Set((g??[]).map(e=>e.trim()).filter(Boolean)),v=g!==void 0,x=n.data!==null,S=x?n.data?.skills??[]:[],T=b(S,c),E=y(T),D=v?S.filter(e=>_.has(e.name)).length:S.length,O=!!d&&s&&!o,k=e=>{let n=V(d,t);if(n<0)return;let r=[`agents`,`list`,n,`skills`],i=f.getState();e===null?i.removePath(r):i.setPath(r,e)},A=(e,t)=>{let n=e.name.trim();if(!O||!n)return;let r=S.map(e=>e.name).filter(Boolean);k(Ke({current:g??null,allSkills:r,skillName:n,enable:t}))};return(0,w.jsxs)(`div`,{"data-testid":`agent-skills`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Skills`}),(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub`,children:[`Per-agent skill allowlist and workspace skills.`,` `,S.length>0?(0,w.jsxs)(`span`,{className:`ct-mono`,"data-testid":`agent-skills-count`,children:[D,`/`,S.length]}):null]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[(0,w.jsx)(u,{size:`sm`,disabled:!O,"data-testid":`agent-skills-use-all`,onClick:()=>k(null),children:`Use All`}),(0,w.jsx)(u,{size:`sm`,disabled:!O,"data-testid":`agent-skills-disable-all`,onClick:()=>k([]),children:`Disable All`}),(0,w.jsx)(u,{size:`sm`,disabled:n.loading,"data-testid":`agent-skills-refresh`,onClick:n.reload,children:n.loading?`Loading…`:`Refresh`}),(0,w.jsx)(H,{testId:`agent-skills`})]})]}),d?null:(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Load the gateway config to set per-agent skills.`}),(0,w.jsx)(`div`,{className:`ct-agents__callout`,"data-testid":`agent-skills-callout`,children:v?`This agent uses a custom skill allowlist.`:`All skills are enabled. Disabling any skill will create a per-agent allowlist.`}),!x&&!n.loading?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Load skills for this agent to view workspace-specific entries.`}):null,n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null,n.loading&&!n.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading skills…`}):null,(0,w.jsxs)(`div`,{className:`ct-agents__skills-filters`,children:[(0,w.jsx)(`input`,{type:`text`,"aria-label":`Filter skills`,placeholder:`Search skills`,"data-testid":`agent-skills-filter`,value:c,onChange:e=>l(e.target.value)}),(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,"data-testid":`agent-skills-shown`,children:[T.length,` shown`]})]}),x&&T.length===0?(0,w.jsx)(a,{message:`No skills found.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__skills-groups`,children:E.map(e=>(0,w.jsxs)(`details`,{className:`ct-agents__skills-group`,open:!(e.id===`workspace`||e.id===`built-in`),"data-testid":`agent-skill-group-${e.id}`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:e.label}),(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:e.skills.length})]}),(0,w.jsx)(`div`,{className:`ct-agents__skills-list`,children:e.skills.map(e=>(0,w.jsx)(Je,{skill:e,enabled:!v||_.has(e.name),editable:O,onToggle:t=>A(e,t)},e.skillKey))})]},e.id))})]})}function Je({skill:e,enabled:t,editable:n,onToggle:r}){let i=x(e),a=S(e);return(0,w.jsxs)(`div`,{className:`ct-agents__skill-row`,"data-testid":`agent-skill-row-${e.name}`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__skill-main`,children:[(0,w.jsxs)(`span`,{className:`ct-agents__channel-label`,children:[e.emoji?`${e.emoji} `:``,e.name]}),(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:e.description}),(0,w.jsxs)(`span`,{className:`ct-agents__chip-row`,children:[(0,w.jsx)(h,{children:e.source}),(0,w.jsx)(h,{tone:e.eligible?`ok`:`warn`,children:e.eligible?`eligible`:`blocked`}),e.disabled?(0,w.jsx)(h,{tone:`warn`,children:`disabled`}):null]}),i.length>0?(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,children:[`Missing: `,i.join(`, `)]}):null,a.length>0?(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,children:[`Reason: `,a.join(`, `)]}):null]}),(0,w.jsx)(`label`,{className:`ct-agents__tool-toggle`,children:(0,w.jsx)(`input`,{type:`checkbox`,"aria-label":`Enable ${e.name}`,checked:t,disabled:!n,onChange:e=>r(e.target.checked)})})]})}var Ye=[{id:`readonly`,label:`Readonly`},{id:`minimal`,label:`Minimal`},{id:`coding`,label:`Coding`},{id:`full`,label:`Full`}];function X(e,t){let n=V(e,t);return n<0?null:[`agents`,`list`,n,`tools`]}function Xe({agent:e}){let t=e.id,n=p(`tools.catalog`,{agentId:t,includePlugins:!0},{refreshMs:3e4}),r=f(e=>e.draft),i=f(e=>e.snapshot?.config??null),a=f(e=>e.busy),o=f(e=>e.schema!==null),s=r??i,c=B(s,t).entry?.tools??{},l=Be(s),d=c.profile??l.profile??`full`,m=c.profile?`agent override`:l.profile?`global default`:`default`,h=c.exec?.preset??l.exec?.preset??null,g=n.data&&n.data.agentId===t?n.data.execPolicy:void 0,_=g?.canExec??`full`,v=Array.isArray(c.allow)&&c.allow.length>0,y=Array.isArray(l.allow)&&l.allow.length>0,b=!!s&&o&&!a&&!v,x=!!s&&o&&!a,S={alsoAllow:v?[]:c.alsoAllow??[],deny:v?[]:c.deny??[]},C=v?{allow:c.allow??[],deny:c.deny??[]}:Ue(d),T=n.data?.groups?.length&&n.data.agentId===t?n.data.groups:Re,E=n.data?.profiles?.length&&n.data.agentId===t?n.data.profiles:ze,D=T.flatMap(e=>e.tools.map(e=>e.id)),O=e=>Y(e,C,S).baseAllowed,k=D.filter(e=>Y(e,C,S).allowed).length,A=e=>{let n=X(s,t);if(!n)return;let r=f.getState();e.alsoAllow.length>0?r.setPath([...n,`alsoAllow`],e.alsoAllow):r.removePath([...n,`alsoAllow`]),e.deny.length>0?r.setPath([...n,`deny`],e.deny):r.removePath([...n,`deny`])},j=(e,t)=>{A(Ge({current:S,baseAllowed:O,toggles:[{toolId:e,enable:t}]}))},M=e=>{A(Ge({current:S,baseAllowed:O,toggles:D.map(t=>({toolId:t,enable:e}))}))},N=(e,n)=>{let r=X(s,t);if(!r)return;let i=f.getState();e?i.setPath([...r,`profile`],e):i.removePath([...r,`profile`]),n&&i.removePath([...r,`allow`])},P=e=>{let n=X(s,t);if(!n)return;let r=f.getState();e?r.setPath([...n,`exec`,`preset`],e):r.removePath([...n,`exec`,`preset`])},F=Y(`exec`,C,S).allowed;return(0,w.jsxs)(`div`,{"data-testid":`agent-tools`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Tool access`}),(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub`,children:[`Profile + per-tool overrides for this agent.`,` `,(0,w.jsxs)(`span`,{className:`ct-mono`,children:[k,`/`,D.length]}),` `,`enabled.`]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[(0,w.jsx)(u,{size:`sm`,disabled:!b,onClick:()=>M(!0),children:`Enable All`}),(0,w.jsx)(u,{size:`sm`,disabled:!b,onClick:()=>M(!1),children:`Disable All`}),(0,w.jsx)(H,{testId:`agent-tools`})]})]}),n.error?(0,w.jsx)(`div`,{className:`ct-agents__callout ct-agents__callout--warn`,role:`status`,children:`Could not load runtime tool catalog. Showing fallback list.`}):null,s?null:(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Load the gateway config to adjust tool profiles.`}),v?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`This agent is using an explicit allowlist in config. Tool overrides are managed in the Config tab.`}):null,y?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Global tools.allow is set. Agent overrides cannot enable tools that are globally blocked.`}):null,F&&g?.canExec===`none`?(0,w.jsx)(`div`,{className:`ct-agents__callout ct-agents__callout--warn`,"data-testid":`agent-tools-exec-none`,children:`Exec tool is enabled but tools.exec security denies every command - pick a preset below or adjust tools.exec.security.`}):null,F&&_===`safebins-only`?(0,w.jsx)(`div`,{className:`ct-agents__callout`,"data-testid":`agent-tools-safebins`,children:`Exec is limited to safe bins; choose a preset to broaden read-only diagnostics.`}):null,(0,w.jsxs)(`div`,{className:`ct-agents__kv-grid ct-agents__kv-grid--tools`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Profile`}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value ct-mono`,"data-testid":`agent-tools-profile`,children:d})]}),(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Source`}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value`,children:m})]}),a?(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Status`}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value ct-mono`,children:`unsaved`})]}):null,g?(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Exec`}),(0,w.jsxs)(`span`,{className:`ct-agents__kv-value ct-mono`,"data-testid":`agent-tools-exec-policy`,children:[g.presetId??g.security,` · `,g.ask,` · `,g.canExec]})]}):null]}),(0,w.jsxs)(`div`,{className:`ct-agents__presets`,"data-testid":`agent-tools-presets`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Quick presets`}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[E.map(e=>(0,w.jsx)(u,{size:`sm`,"aria-pressed":d===e.id,disabled:!b,onClick:()=>N(e.id,!0),children:e.label},e.id)),(0,w.jsx)(u,{size:`sm`,"aria-pressed":!1,disabled:!b,onClick:()=>N(null,!1),children:`Inherit`})]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__presets`,"data-testid":`agent-exec-presets`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Exec policy`}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[Ye.map(e=>(0,w.jsx)(u,{size:`sm`,"aria-pressed":h===e.id,disabled:!x,onClick:()=>P(e.id),children:e.label},e.id)),(0,w.jsx)(u,{size:`sm`,"aria-pressed":!1,disabled:!x,onClick:()=>P(null),children:`Inherit`})]})]}),(0,w.jsx)(`div`,{className:`ct-agents__tools-grid`,children:T.map(e=>(0,w.jsxs)(`div`,{className:`ct-agents__tools-section`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__tools-head`,children:[(0,w.jsx)(`span`,{children:e.label}),e.source===`plugin`?(0,w.jsx)(`span`,{className:`ct-mono`,children:`plugin`}):null]}),(0,w.jsx)(`div`,{className:`ct-agents__tools-list`,children:e.tools.map(e=>{let t=e.source===`plugin`?e.pluginId?`plugin:${e.pluginId}`:`plugin`:`core`;return(0,w.jsxs)(`div`,{className:`ct-agents__tool-row`,"data-testid":`agent-tool-${e.id}`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`ct-agents__tool-title ct-mono`,children:[e.label,(0,w.jsx)(`span`,{className:`ct-agents__tool-source`,children:t}),e.optional===!0?(0,w.jsx)(`span`,{className:`ct-agents__tool-source`,children:`optional`}):null]}),(0,w.jsx)(`div`,{className:`ct-agents__tool-desc`,children:e.description})]}),(0,w.jsx)(`label`,{className:`ct-agents__tool-toggle`,children:(0,w.jsx)(`input`,{type:`checkbox`,"aria-label":`Enable ${e.label}`,checked:Y(e.id,C,S).allowed,disabled:!b,onChange:t=>j(e.id,t.target.checked)})})]},e.id)})})]},e.id))}),n.loading?(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Refreshing tool catalog…`}):null]})}var Z=[{id:`overview`,label:`Overview`},{id:`files`,label:`Files`},{id:`tools`,label:`Tools`},{id:`skills`,label:`Skills`},{id:`channels`,label:`Channels`},{id:`cron`,label:`Cron jobs`}];function Ze({agent:e,agents:t,defaultId:n,panel:r,onPanelChange:i}){let a=e.id,o=p(`agent.identity.get`,{agentId:a}),c=f(e=>e.draft),l=f(e=>e.snapshot?.config??null),u=c??l,d=o.data&&o.data.agentId===a?o.data:null,m=ee(a,n),g=I(e),v=e.description?.trim()||e.identity?.theme?.trim()||`Agent workspace and routing.`,y=z(e,d),b=R(e,d),x=e.team?.id,S=x===void 0?[]:t.filter(e=>e.team?.id===x&&e.id!==a).toSorted((e,t)=>Number(t.team?.role===`lead`)-Number(e.team?.role===`lead`)),C=ne({agent:e,config:u,filesWorkspace:null,defaultId:n,agentIdentity:d});return(0,w.jsxs)(`div`,{className:`ct-agents__detail`,"data-testid":`agent-detail`,children:[(0,w.jsxs)(`section`,{className:`ct-agents__header`,"data-testid":`agent-header`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__header-main`,children:[(0,w.jsx)(T,{src:y,emoji:b,label:g,large:!0,testId:`agent-avatar`}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h2`,{className:`ct-agents__name`,"data-testid":`agent-name`,children:g}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,"data-testid":`agent-subtitle`,children:v})]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__header-meta`,children:[(0,w.jsx)(`span`,{className:`ct-mono`,"data-testid":`agent-id`,children:a}),e.team?(0,w.jsxs)(h,{tone:`neutral`,children:[e.team.name??e.team.id,` · `,e.team.role]}):null,m?(0,w.jsx)(h,{tone:`accent`,children:m}):null,o.error?(0,w.jsx)(h,{tone:`danger`,children:`identity unavailable`}):null]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__links`,"data-testid":`agent-links`,children:[(0,w.jsx)(_,{to:s.sessions({agent:a}),children:`Sessions`}),(0,w.jsx)(_,{to:s.runs({agent:a}),children:`Runs`}),S.length>0?(0,w.jsxs)(`span`,{className:`ct-agents__team-links`,children:[`Team:`,S.map(e=>(0,w.jsx)(_,{to:s.agent(e.id),children:I(e)},e.id))]}):null]}),(0,w.jsx)(`div`,{className:`ct-agents__tabs`,role:`tablist`,"data-testid":`agent-tabs`,children:Z.map(e=>(0,w.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":r===e.id,className:`ct-agents__tab${r===e.id?` ct-agents__tab--active`:``}`,onClick:()=>i(e.id),children:e.label},e.id))}),r===`overview`?(0,w.jsx)(Te,{agent:e,defaultId:n,identity:d,identityLoading:o.loading,identityError:o.error}):null,r===`files`?(0,w.jsx)(be,{agentId:a},a):null,r===`tools`?(0,w.jsx)(Xe,{agent:e},a):null,r===`skills`?(0,w.jsx)(qe,{agent:e},a):null,r===`channels`?(0,w.jsx)(pe,{context:C},a):null,r===`cron`?(0,w.jsx)(ye,{agentId:a,context:C},a):null]})}var Q=`Check in`;function $(e){let t=new URL(window.location.href);t.searchParams.set(`agent`,e.agent),e.tab===`overview`?t.searchParams.delete(`tab`):t.searchParams.set(`tab`,e.tab),window.history.replaceState({},``,`${t.pathname}${t.search}`)}function Qe(){let e=c(),t=i(e=>e.request),n=p(`agents.list`,{},{refreshMs:m}),r=n.data?.agents??[],s=n.data?.defaultId??null,[l,h]=(0,C.useState)(()=>Z.find(t=>t.id===e.params.get(`tab`))?.id??`overview`),[_,v]=(0,C.useState)(()=>e.params.get(`agent`)),[y,b]=(0,C.useState)(!1),[x,S]=(0,C.useState)(Q),[T,E]=(0,C.useState)(!1),[D,O]=(0,C.useState)(null),k=(0,C.useRef)(!1),A=(0,C.useRef)(e.params.get(`agent`)),j=(0,C.useRef)(Z.find(t=>t.id===e.params.get(`tab`))?.id??`overview`),M=e.params.get(`agent`);(0,C.useEffect)(()=>{M!==A.current&&(A.current=M,M&&v(M))},[M]);let P=e.params.get(`tab`);(0,C.useEffect)(()=>{let e=Z.find(e=>e.id===P)?.id??`overview`;e!==j.current&&(j.current=e,h(e))},[P]);let F=r.find(e=>e.id===_)??r.find(e=>e.id===s)??r[0]??null;(0,C.useEffect)(()=>{k.current||(k.current=!0,f.getState().load())},[]);let I=e=>{e!==F?.id&&(A.current=e,v(e),$({agent:e,tab:l}))},L=e=>{h(e),j.current=e,F&&$({agent:F.id,tab:e})},R=async()=>{if(!F||T)return;let e=x.trim();if(e){E(!0),O(null);try{await t(`agent.nudge`,{agentId:F.id,text:e}),b(!1),S(Q)}catch(e){O(o(e))}finally{E(!1)}}};return(0,w.jsxs)(`div`,{className:`ct-page`,"data-testid":`agents-view`,children:[(0,w.jsx)(`header`,{className:`ct-page__head`,children:(0,w.jsxs)(`div`,{className:`ct-page__head-text`,children:[(0,w.jsx)(`h1`,{className:`ct-page__title`,children:`Agents`}),(0,w.jsx)(`p`,{className:`ct-page__sub`,children:`Personas, workspaces, tools and schedules.`})]})}),(0,w.jsxs)(`div`,{className:`ct-agents__layout`,children:[(0,w.jsxs)(g,{className:`ct-agents__sidebar`,title:`Agents`,sub:`${r.length} configured.`,actions:(0,w.jsx)(u,{size:`sm`,disabled:!F,"data-testid":`agents-nudge`,onClick:()=>{S(Q),O(null),b(!0)},children:`Nudge agent`}),children:[n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null,n.loading&&!n.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading agents…`}):null,n.data&&r.length===0?(0,w.jsx)(a,{message:`No agents found.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__list`,"data-testid":`agent-list`,children:N(r).map(e=>(0,w.jsxs)(`div`,{className:`ct-agents__group`,children:[e.title?(0,w.jsx)(`h3`,{className:`ct-agents__group-title`,"data-testid":`agent-group-${e.teamId}`,children:e.title}):null,e.agents.map(e=>(0,w.jsx)($e,{agent:e,defaultId:s,active:F?.id===e.id,onSelect:()=>I(e.id)},e.id))]},e.teamId??`__ungrouped`))})]}),F?(0,w.jsx)(Ze,{agent:F,agents:r,defaultId:s,panel:l,onPanelChange:L},F.id):(0,w.jsx)(g,{title:`Select an agent`,sub:`Pick an agent to inspect its workspace and tools.`,children:n.data&&r.length===0?(0,w.jsx)(a,{message:`No agents are configured on this gateway.`}):null})]}),(0,w.jsxs)(d,{open:y,title:`Nudge agent`,onClose:()=>b(!1),width:`sm`,footer:(0,w.jsxs)(`div`,{className:`ct-agents__dialog-actions`,children:[(0,w.jsx)(u,{size:`sm`,onClick:()=>b(!1),children:`Cancel`}),(0,w.jsx)(u,{size:`sm`,variant:`primary`,disabled:T||!x.trim(),"data-testid":`agents-nudge-send`,onClick:()=>void R(),children:T?`Sending…`:`Send nudge`})]}),children:[(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsx)(`span`,{children:`Message`}),(0,w.jsx)(`textarea`,{"data-testid":`agents-nudge-text`,rows:3,value:x,onChange:e=>S(e.target.value)})]}),D?(0,w.jsx)(`p`,{className:`ct-agents__callout ct-agents__callout--danger`,role:`alert`,children:D}):null]})]})}function $e({agent:e,defaultId:t,active:n,onSelect:r}){let i=I(e),a=ee(e.id,t);return(0,w.jsxs)(`button`,{type:`button`,className:`ct-agents__row${n?` ct-agents__row--active`:``}`,"data-testid":`agent-row-${e.id}`,"aria-current":n?`true`:void 0,onClick:r,children:[(0,w.jsx)(T,{src:z(e,null),emoji:R(e,null),label:i}),(0,w.jsxs)(`span`,{className:`ct-agents__row-info`,children:[(0,w.jsx)(`span`,{className:`ct-agents__row-name`,children:i}),(0,w.jsx)(`span`,{className:`ct-agents__row-id ct-mono`,children:e.id})]}),a?(0,w.jsx)(h,{tone:`accent`,children:a}):null,e.team?.role===`lead`?(0,w.jsx)(h,{tone:`neutral`,children:`lead`}):null,e.userFacing===!1?(0,w.jsx)(h,{tone:`neutral`,children:`internal`}):null]})}export{Qe as default};
1
+ import{_ as e,c as t,h as n,i as r,l as i,s as a,t as o}from"./format-CGs6a1G6.js";import{n as s,o as c,t as l}from"./links-DlVrQOFC.js";import{t as u}from"./Button-CGdLofSY.js";import{t as d}from"./Dialog-CQE8Pvh6.js";import{r as f}from"./config-store-XvvVJ8Fq.js";import{n as p,t as m}from"./use-gateway-query-D25QZANO.js";import{t as h}from"./Badge-CB5TWfdz.js";import{t as g}from"./Panel-9wOynsWc.js";import{t as _}from"./EntityLink-BO2oG3y8.js";import{t as v}from"./Stat-BZwg1PGE.js";import{a as y,i as b,n as x,r as S}from"./skills-model-DANiC-ui.js";var C=e(n(),1),w=t();function T({src:e,emoji:t,label:n,large:r=!1,testId:i}){let[a,o]=(0,C.useState)(!1),[s,c]=(0,C.useState)(e);e!==s&&(c(e),o(!1));let l=[`ct-agents__avatar`,r?`ct-agents__avatar--lg`:null].filter(Boolean).join(` `);return e&&!a?(0,w.jsx)(`img`,{className:l,src:e,alt:``,"data-testid":i?`${i}-img`:void 0,onError:()=>o(!0)}):(0,w.jsx)(`span`,{className:l,"data-testid":i?`${i}-fallback`:void 0,"aria-hidden":`true`,children:t||n.slice(0,1).toUpperCase()})}function E(e){if(!e)return`-`;if(typeof e==`string`)return e.trim()||`-`;let t=P(e);if(!t)return`-`;let n=typeof t.primary==`string`?t.primary.trim():``;if(!n)return`-`;let r=Array.isArray(t.fallbacks)?t.fallbacks.length:0;return r>0?`${n} (+${r} fallback)`:n}function D(e){let t=e.match(/^(.+) \(\+\d+ fallback\)$/);return t?t[1]:e}function O(e){if(!e)return null;if(typeof e==`string`)return e.trim()||null;let t=P(e);return t&&(typeof t.primary==`string`?t.primary:typeof t.model==`string`?t.model:typeof t.id==`string`?t.id:typeof t.value==`string`?t.value:null)?.trim()||null}function k(e){let t=P(e);if(!t)return null;let n=Array.isArray(t.fallbacks)?t.fallbacks:Array.isArray(t.fallback)?t.fallback:null;return n?n.filter(e=>typeof e==`string`):null}function A(e,t){return k(e)??k(t)}function j(e){return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function M(e,t){let n=(e||null)?.agents?.defaults?.models,r=[];if(n&&typeof n==`object`)for(let[e,t]of Object.entries(n)){let n=e.trim();if(!n)continue;let i=t?.alias?.trim(),a=i&&i!==n?`${i} (${n})`:n;r.push({value:n,label:a})}let i=t?r.some(e=>e.value===t):!1;return t&&!i&&r.unshift({value:t,label:`Current (${t})`}),r.length===0?[{value:``,label:`No configured models`,disabled:!0}]:r}function N(e){let t=new Map;for(let n of e){let e=n.team?.id??null,r=e??`\0`,i=t.get(r);i||(i={teamId:e,title:e===null?null:n.team?.name??e,agents:[]},t.set(r,i)),n.team?.role===`lead`?(e!==null&&n.team?.name&&(i.title=n.team.name),i.agents.unshift(n)):i.agents.push(n)}return[...t.values()].toSorted((e,t)=>e.teamId===null?1:t.teamId===null?-1:0)}function P(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function F(e){let t=P(e);return t&&typeof t.id==`string`?t.id:null}function I(e){return e.name?.trim()||e.identity?.name?.trim()||e.id}function L(e){let t=e.trim();if(!t||t.length>16)return!1;let n=!1;for(let e=0;e<t.length;e+=1)if(t.charCodeAt(e)>127){n=!0;break}return n?!t.includes(`://`)&&!t.includes(`/`)&&!t.includes(`.`):!1}function R(e,t){let n=t?.emoji?.trim();if(n&&L(n))return n;let r=e.identity?.emoji?.trim();if(r&&L(r))return r;let i=t?.avatar?.trim();if(i&&L(i))return i;let a=e.identity?.avatar?.trim();return a&&L(a)?a:``}function z(e,t){let n=[t?.avatar,e.identity?.avatarUrl,e.identity?.avatar];for(let e of n){let t=e?.trim();if(t&&!L(t))return t}return null}function ee(e,t){return t&&e===t?`default`:null}function te(e){if(e==null||!Number.isFinite(e))return`-`;if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r+=1;return`${n.toFixed(+(n<10))} ${t[r]}`}function B(e,t){let n=e||null;return{entry:(n?.agents?.list??[]).find(e=>F(e)===t)??null,defaults:n?.agents?.defaults??null}}function V(e,t){let n=e?e.agents?.list:void 0;return Array.isArray(n)?n.findIndex(e=>F(e)===t):-1}function ne(e){let{agent:t,config:n,filesWorkspace:r,defaultId:i,agentIdentity:a}=e,o=B(n,t.id),s=r||o.entry?.workspace||o.defaults?.workspace||`default`,c=o.entry?.model?E(o.entry?.model):E(o.defaults?.model),l=a?.name?.trim()||t.identity?.name?.trim()||t.name?.trim()||o.entry?.name||t.id,u=R(t,a)||`-`,d=Array.isArray(o.entry?.skills)?o.entry?.skills:null,f=d?.length??null;return{workspace:s,model:c,identityName:l,identityEmoji:u,skillsLabel:d?`${f} selected`:`all skills`,isDefault:!!(i&&t.id===i)}}function re(e,t){if(!e)return null;let n=P(e.channels)?.[t];return P(n)??P(e[t])}function ie(e){if(e==null)return`n/a`;if(typeof e==`string`||typeof e==`number`||typeof e==`boolean`)return String(e);try{return JSON.stringify(e)}catch{return`n/a`}}function ae(e){let t=re(e.configForm,e.channelId);return t?e.fields.flatMap(e=>e in t?[{label:e,value:ie(t[e])}]:[]):[]}function oe(e){let t=e/6e4;if(t<60)return`${Math.round(t)}m`;let n=t/60;return n<24?`${Math.round(n*10)/10}h`:`${Math.round(n/24*10)/10}d`}function se(e){let t=e.schedule;if(t.kind===`at`){let e=Date.parse(t.at);return Number.isFinite(e)?`At ${new Date(e).toLocaleString()}`:`At ${t.at}`}return t.kind===`every`?`Every ${oe(t.everyMs)}`:`Cron ${t.expr}${t.tz?` (${t.tz})`:``}`}function ce(e){let t=e.payload;if(t.kind===`systemEvent`)return`System: ${t.text}`;if(t.kind===`wakeGate`){let e=t.gate.kind===`command`?t.gate.command:t.gate.model;return`Wake gate: ${t.gate.kind} (${e??`model`})`}return`Agent: ${t.message}`}var le=[`groupPolicy`,`streamMode`,`dmPolicy`];function ue(e,t){return e.channelMeta?.find(e=>e.id===t)?.label||e.channelLabels[t]||t}function de(e){if(!e)return[];let t=new Set;for(let n of e.channelOrder??[])t.add(n);for(let n of e.channelMeta??[])t.add(n.id);for(let n of Object.keys(e.channelAccounts??{}))t.add(n);let n=[],r=e.channelOrder?.length?e.channelOrder:Array.from(t);for(let e of r)t.has(e)&&(n.push(e),t.delete(e));for(let e of t)n.push(e);return n.map(t=>({id:t,label:ue(e,t),accounts:e.channelAccounts?.[t]??[]}))}function fe(e){let t=0,n=0,r=0;for(let i of e){let e=i.probe&&typeof i.probe==`object`&&`ok`in i.probe?!!i.probe.ok:!1;(i.connected===!0||i.running===!0||e)&&(t+=1),i.configured&&(n+=1),i.enabled&&(r+=1)}return{total:e.length,connected:t,configured:n,enabled:r}}function pe({context:e}){let t=p(`channels.status`,{probe:!1},{refreshMs:m}),n=he(),i=de(t.data),o=t.data?.ts??null;return(0,w.jsxs)(`div`,{"data-testid":`agent-channels`,children:[(0,w.jsx)(me,{context:e,subtitle:`Workspace, identity, and model configuration.`}),(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Channels`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Gateway-wide channel status snapshot.`}),(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub`,children:[`Last refresh: `,o?r(o):`never`]})]}),(0,w.jsx)(u,{size:`sm`,disabled:t.loading,onClick:t.reload,children:t.loading?`Refreshing…`:`Refresh`})]}),t.error?(0,w.jsx)(a,{tone:`error`,message:t.error}):null,t.loading&&!t.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading channels…`}):null,t.data&&i.length===0?(0,w.jsx)(a,{message:`No channels found.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__channel-list`,children:i.map(e=>{let t=fe(e.accounts),r=t.total?`${t.connected}/${t.total} connected`:`no accounts`,i=t.configured?`${t.configured} configured`:`not configured`,a=t.total?`${t.enabled} enabled`:`disabled`,o=ae({configForm:n,channelId:e.id,fields:le});return(0,w.jsxs)(`div`,{className:`ct-agents__channel-row`,"data-testid":`agent-channel-${e.id}`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`ct-agents__channel-label`,children:e.label}),(0,w.jsx)(`div`,{className:`ct-agents__channel-id ct-mono`,children:e.id})]}),(0,w.jsxs)(`div`,{className:`ct-agents__channel-meta`,children:[(0,w.jsx)(`span`,{children:r}),(0,w.jsx)(`span`,{children:i}),(0,w.jsx)(`span`,{children:a}),o.map(e=>(0,w.jsxs)(`span`,{children:[e.label,`: `,e.value]},e.label))]})]},e.id)})})]})}function me({context:e,subtitle:t}){let n=[[`Workspace`,e.workspace],[`Primary model`,e.model],[`Identity name`,e.identityName],[`Identity emoji`,e.identityEmoji],[`Skills filter`,e.skillsLabel],[`Default`,e.isDefault?`yes`:`no`]];return(0,w.jsxs)(`div`,{className:`ct-agents__context-card`,"data-testid":`agent-context-card`,children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Agent context`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:t}),(0,w.jsx)(`div`,{className:`ct-agents__kv-grid`,children:n.map(([e,t])=>(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:e}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value`,children:t})]},e))})]})}function he(){let e=f(e=>e.draft),t=f(e=>e.snapshot?.config??null);return e??t}var ge={includeDisabled:!0,limit:200,offset:0,sortBy:`nextRunAtMs`,sortDir:`asc`},_e=50;function ve(e){let t=i(e=>e.request),[n,r]=(0,C.useState)({jobs:[],loading:!1,error:null});return(0,C.useEffect)(()=>{if(!e||e.hasMore!==!0){r(e=>e.jobs.length===0&&!e.loading&&e.error===null?e:{jobs:[],loading:!1,error:null});return}let n=!1;return r(e=>({jobs:e.jobs,loading:!0,error:null})),(async()=>{let i=[],a=e.nextOffset??200;for(let e=0;e<_e;e+=1)try{let e=await t(`cron.list`,{...ge,offset:a});if(n)return;let r=e.jobs??[];if(i.push(...r),e.hasMore!==!0||r.length===0)break;a=e.nextOffset??a+r.length}catch(e){n||r({jobs:i,loading:!1,error:o(e)});return}n||r({jobs:i,loading:!1,error:null})})(),()=>{n=!0}},[e,t]),n}function ye({agentId:e,context:t}){let n=p(`cron.status`,{},{refreshMs:m}),i=p(`cron.list`,ge,{refreshMs:m}),o=ve(i.data),c=(0,C.useMemo)(()=>[...i.data?.jobs??[],...o.jobs].filter(t=>t.agentId===e),[i.data,o.jobs,e]),d=i.error??o.error;return(0,w.jsxs)(`div`,{"data-testid":`agent-cron`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__cron-top`,children:[(0,w.jsx)(me,{context:t,subtitle:`Workspace and scheduling targets.`}),(0,w.jsxs)(`div`,{className:`ct-agents__context-card`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Scheduler`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Gateway cron status.`})]}),(0,w.jsx)(u,{size:`sm`,disabled:n.loading,onClick:()=>{n.reload(),i.reload()},children:`Refresh`})]}),(0,w.jsxs)(`div`,{className:`ct-agents__stats`,children:[(0,w.jsx)(v,{label:`Enabled`,value:n.data?n.data.enabled?`Yes`:`No`:`n/a`}),(0,w.jsx)(v,{label:`Jobs`,value:n.data?.jobs??`n/a`}),(0,w.jsx)(v,{label:`Next wake`,value:r(n.data?.nextWakeAtMs??null)})]}),n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null]})]}),(0,w.jsx)(`div`,{className:`ct-agents__panel-head`,children:(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Agent cron jobs`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Scheduled jobs targeting this agent.`})]})}),d?(0,w.jsx)(a,{tone:`error`,message:d}):null,i.loading&&!i.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading jobs…`}):null,i.data&&!o.loading&&c.length===0?(0,w.jsx)(a,{message:`No jobs assigned.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__cron-list`,children:c.map(e=>(0,w.jsxs)(`div`,{className:`ct-agents__cron-row`,"data-testid":`agent-cron-job-${e.id}`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__cron-main`,children:[(0,w.jsx)(`span`,{className:`ct-agents__channel-label`,children:e.name}),e.description?(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:e.description}):null,(0,w.jsxs)(`span`,{className:`ct-agents__chip-row`,children:[(0,w.jsx)(h,{children:se(e)}),(0,w.jsx)(h,{tone:e.enabled?`ok`:`warn`,children:e.enabled?`enabled`:`disabled`}),(0,w.jsx)(h,{children:e.sessionTarget})]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__cron-meta`,children:[(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,children:[`Last `,r(e.state?.lastRunAtMs),` · Next`,` `,r(e.state?.nextRunAtMs)]}),(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:ce(e)}),(0,w.jsx)(u,{size:`sm`,"data-testid":`agent-cron-open-${e.id}`,onClick:()=>l(s.automation(e.id)),children:`Open in Automations`})]})]},e.id))})]})}function be({agentId:e}){let t=i(e=>e.request),n=p(`agents.files.list`,{agentId:e}),[r,s]=(0,C.useState)({}),[c,l]=(0,C.useState)({}),[d,f]=(0,C.useState)(null),[m,h]=(0,C.useState)(!1),[g,_]=(0,C.useState)(null),v=(0,C.useRef)({}),y=n.data?.agentId===e?n.data.files??[]:[],b=d?y.find(e=>e.name===d)??null:null,x=d?r[d]??``:``,S=d?Object.hasOwn(r,d):!1,T=d?c[d]??x:``,E=d?T!==x:!1,D=(e,t)=>{v.current={...v.current,[e]:t},s(v.current)};(0,C.useEffect)(()=>{d&&y.length>0&&!y.some(e=>e.name===d)&&f(null)},[d,y]),(0,C.useEffect)(()=>{if(!d||Object.hasOwn(v.current,d))return;let n=!1,r=d;return t(`agents.files.get`,{agentId:e,name:r}).then(e=>{n||!e?.file||(D(r,e.file.content??``),l(t=>({...t,[r]:e.file.content??``})))}).catch(e=>{n||_(o(e))}),()=>{n=!0}},[d,e,t]);let O=async()=>{if(!d||!E||m)return;let i=d,a=c[i]??r[i]??``;h(!0),_(null);try{(await t(`agents.files.set`,{agentId:e,name:i,content:a}))?.file&&(D(i,a),l(e=>({...e,[i]:a})),n.reload())}catch(e){_(o(e))}finally{h(!1)}};return(0,w.jsxs)(`div`,{"data-testid":`agent-files`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Core files`}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Bootstrap persona, identity, and tool guidance.`}),n.data?.agentId===e?(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub ct-mono`,children:[`Workspace: `,n.data.workspace]}):null]}),(0,w.jsx)(u,{size:`sm`,disabled:n.loading,"data-testid":`agent-files-refresh`,onClick:n.reload,children:n.loading?`Loading…`:`Refresh`})]}),n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null,n.loading&&!n.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading files…`}):null,g?(0,w.jsx)(`div`,{role:`alert`,className:`ct-agents__callout ct-agents__callout--danger`,"data-testid":`agent-files-error`,children:g}):null,n.data?y.length===0?(0,w.jsx)(a,{message:`No files found.`}):(0,w.jsxs)(`div`,{className:`ct-agents__files-grid`,children:[(0,w.jsx)(`div`,{className:`ct-agents__files-list`,"data-testid":`agent-files-list`,children:y.map(e=>(0,w.jsx)(xe,{file:e,active:d===e.name,onSelect:()=>f(e.name)},e.name))}),(0,w.jsx)(`div`,{className:`ct-agents__files-editor`,children:b?(0,w.jsxs)(w.Fragment,{children:[(0,w.jsxs)(`div`,{className:`ct-agents__file-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`div`,{className:`ct-agents__file-name ct-mono`,children:b.name}),(0,w.jsx)(`div`,{className:`ct-agents__file-path ct-mono`,children:b.path})]}),(0,w.jsxs)(`div`,{className:`ct-agents__file-actions`,children:[(0,w.jsx)(u,{size:`sm`,disabled:!E,"data-testid":`agent-file-reset`,onClick:()=>l(e=>({...e,[b.name]:x})),children:`Reset`}),(0,w.jsx)(u,{size:`sm`,variant:`primary`,disabled:m||!E,"data-testid":`agent-file-save`,onClick:()=>void O(),children:m?`Saving…`:`Save`})]})]}),b.missing?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`This file is missing. Saving will create it in the agent workspace.`}):null,(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsx)(`span`,{children:`Content`}),(0,w.jsx)(`textarea`,{"data-testid":`agent-file-editor`,rows:16,value:T,disabled:!S,placeholder:S?void 0:`Loading…`,onChange:e=>l(t=>({...t,[b.name]:e.target.value}))})]})]}):(0,w.jsx)(a,{message:`Select a file to edit.`})})]}):null]})}function xe({file:e,active:t,onSelect:n}){let i=e.missing?`Missing`:`${te(e.size)} · ${r(e.updatedAtMs??null)}`;return(0,w.jsxs)(`button`,{type:`button`,className:`ct-agents__file-row${t?` ct-agents__file-row--active`:``}`,"data-testid":`agent-file-${e.name}`,onClick:n,children:[(0,w.jsxs)(`span`,{className:`ct-agents__file-row-main`,children:[(0,w.jsx)(`span`,{className:`ct-agents__file-row-name ct-mono`,children:e.name}),(0,w.jsx)(`span`,{className:`ct-agents__file-row-meta`,children:i})]}),e.missing?(0,w.jsx)(`span`,{className:`ct-agents__pill ct-agents__pill--warn`,children:`missing`}):null]})}function H({testId:e,onBeforeSave:t}){let n=f(e=>e.dirty),r=f(e=>e.busy),i=f(e=>e.error),a=f(e=>e.snapshot!==null),o=async()=>{t?.(),await f.getState().save(`set`)};return(0,w.jsxs)(`div`,{className:`ct-agents__config-actions`,children:[i?(0,w.jsxs)(`div`,{className:`ct-agents__config-error`,role:`alert`,"data-testid":`${e}-error`,children:[(0,w.jsx)(`span`,{children:i}),(0,w.jsx)(u,{size:`sm`,"data-testid":`${e}-error-reload`,onClick:()=>void f.getState().load(),children:`Reload from gateway`})]}):null,(0,w.jsxs)(`div`,{className:`ct-agents__config-buttons`,children:[(0,w.jsx)(`span`,{className:`ct-agents__config-state`,"data-testid":`${e}-state`,children:a?n?`unsaved`:`saved`:`Config not loaded`}),(0,w.jsx)(u,{size:`sm`,disabled:r,"data-testid":`${e}-reload`,onClick:()=>void f.getState().load(),children:`Reload Config`}),(0,w.jsx)(u,{size:`sm`,variant:`primary`,disabled:r||!n,"data-testid":`${e}-save`,onClick:()=>void o(),children:r?`Saving…`:`Save`})]})]})}function Se(e){return e&&typeof e==`object`&&!Array.isArray(e)?`primary`in e&&typeof e.primary==`string`&&e.primary.trim()||null:typeof e==`string`&&e.trim()||null}function Ce(e,t,n,r,i){let a=V(e,t);if(a<0)return;let o=[`agents`,`list`,a,`model`];if(!n){i(o);return}let s=B(e,t).entry?.model;if(s&&typeof s==`object`&&!Array.isArray(s)){let e=k(s);r(o,{primary:n,...e?{fallbacks:e}:{}});return}r(o,n)}function we(e,t,n,r,i){let a=V(e,t);if(a<0)return;let o=[`agents`,`list`,a,`model`],s=Se(B(e,t).entry?.model);if(n.length===0){s?r(o,s):i(o);return}r(o,s?{primary:s,fallbacks:n}:{fallbacks:n})}function Te({agent:e,defaultId:t,identity:n,identityLoading:r,identityError:i}){let a=f(e=>e.draft),o=f(e=>e.snapshot?.config??null),s=f(e=>e.busy),c=f(e=>e.schema!==null),l=a??o,u=B(l,e.id),d=u.entry?.workspace||u.defaults?.workspace||`default`,p=u.entry?.model?E(u.entry.model):E(u.defaults?.model),m=E(u.defaults?.model),h=O(u.entry?.model)??(p===`-`?null:D(p))??O(u.defaults?.model)??(m===`-`?null:D(m)),g=A(u.entry?.model,u.defaults?.model),_=g?g.join(`, `):``,[v,y]=(0,C.useState)(null);(0,C.useEffect)(()=>{y(null)},[_]);let b=v??_,x=n?.name?.trim()||e.identity?.name?.trim()||e.name?.trim()||u.entry?.name||`-`,S=R(e,n)||`-`,T=Array.isArray(u.entry?.skills)?u.entry?.skills:null,k=r?`Loading…`:i?`Unavailable`:``,N=!!(t&&e.id===t),P=ne({agent:e,config:l,filesWorkspace:null,defaultId:t,agentIdentity:n}),F=!!l&&c&&!s,I=(e,t)=>f.getState().setPath(e,t),L=e=>f.getState().removePath(e),z=()=>{if(v===null||v===_){y(null);return}y(null),we(l,e.id,j(v),I,L)};return(0,w.jsxs)(`div`,{"data-testid":`agent-overview`,children:[(0,w.jsx)(`div`,{className:`ct-agents__kv-grid`,children:[[`Workspace`,d],[`Primary model`,p],[`Identity name`,x,k||void 0],[`Default`,N?`yes`:`no`],[`Identity emoji`,S],[`Skills filter`,T?`${T.length} selected`:`all skills`]].map(([e,t,n])=>(0,w.jsxs)(`div`,{className:`ct-agents__kv`,"data-testid":`agent-kv-${e.toLowerCase().replace(/\s+/g,`-`)}`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:e}),(0,w.jsx)(`span`,{className:e===`Workspace`?`ct-agents__kv-value ct-mono`:`ct-agents__kv-value`,children:t}),n?(0,w.jsx)(`span`,{className:`ct-agents__kv-note`,children:n}):null]},e))}),(0,w.jsxs)(`div`,{className:`ct-agents__model-edit`,"data-testid":`agent-model-edit`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Model selection`}),(0,w.jsxs)(`div`,{className:`ct-agents__model-fields`,children:[(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsxs)(`span`,{children:[`Primary model`,N?` (default)`:``]}),(0,w.jsxs)(`select`,{"data-testid":`agent-model-select`,value:h??``,disabled:!F,onChange:t=>Ce(l,e.id,t.target.value||null,I,L),children:[N?null:(0,w.jsx)(`option`,{value:``,children:m===`-`?`Inherit default`:`Inherit default (${m})`}),M(l,h).map(e=>(0,w.jsx)(`option`,{value:e.value,disabled:e.disabled,children:e.label},e.value))]})]}),(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsx)(`span`,{children:`Fallbacks (comma-separated)`}),(0,w.jsx)(`input`,{"data-testid":`agent-fallbacks-input`,value:b,disabled:!F,placeholder:`provider/model, provider/model`,onChange:e=>y(e.target.value),onBlur:z})]})]}),(0,w.jsx)(H,{testId:`agent-config`,onBeforeSave:z})]}),(0,w.jsxs)(`p`,{className:`ct-agents__hint`,children:[`Routing context: `,P.model===`-`?`model unset`:P.model,`,`,` `,P.skillsLabel,`.`]})]})}var Ee=[{id:`fs`,label:`Files`},{id:`runtime`,label:`Runtime`},{id:`web`,label:`Web`},{id:`memory`,label:`Memory`},{id:`sessions`,label:`Sessions`},{id:`ui`,label:`UI`},{id:`messaging`,label:`Messaging`},{id:`automation`,label:`Automation`},{id:`nodes`,label:`Nodes`},{id:`agents`,label:`Agents`},{id:`media`,label:`Media`}],U=[{id:`read`,label:`read`,description:`Read file contents`,sectionId:`fs`,profiles:[`coding`]},{id:`write`,label:`write`,description:`Create or overwrite files`,sectionId:`fs`,profiles:[`coding`]},{id:`edit`,label:`edit`,description:`Make precise edits`,sectionId:`fs`,profiles:[`coding`]},{id:`delete`,label:`delete`,description:`Delete a workspace file`,sectionId:`fs`,profiles:[`coding`]},{id:`apply_patch`,label:`apply_patch`,description:`Patch files (OpenAI)`,sectionId:`fs`,profiles:[`coding`]},{id:`exec`,label:`exec`,description:`Run shell commands`,sectionId:`runtime`,profiles:[`coding`]},{id:`process`,label:`process`,description:`Manage background processes`,sectionId:`runtime`,profiles:[`coding`]},{id:`web_search`,label:`web_search`,description:`Search the web`,sectionId:`web`,profiles:[],includeInOpenClawGroup:!0},{id:`web_fetch`,label:`web_fetch`,description:`Fetch web content`,sectionId:`web`,profiles:[],includeInOpenClawGroup:!0},{id:`memory_search`,label:`memory_search`,description:`Semantic search`,sectionId:`memory`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`memory_get`,label:`memory_get`,description:`Read memory files`,sectionId:`memory`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`sessions_list`,label:`sessions_list`,description:`List sessions`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_history`,label:`sessions_history`,description:`Session history`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_send`,label:`sessions_send`,description:`Send to session`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`agents_nudge`,label:`agents_nudge`,description:`Wake another agent`,sectionId:`sessions`,profiles:[`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`sessions_spawn`,label:`sessions_spawn`,description:`Spawn sub-agent`,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`subagents`,label:`subagents`,description:`Manage sub-agents`,sectionId:`sessions`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`session_status`,label:`session_status`,description:`Session status`,sectionId:`sessions`,profiles:[`minimal`,`coding`,`messaging`],includeInOpenClawGroup:!0},{id:`browser`,label:`browser`,description:`Control web browser`,sectionId:`ui`,profiles:[],includeInOpenClawGroup:!0},{id:`canvas`,label:`canvas`,description:`Control canvases`,sectionId:`ui`,profiles:[],includeInOpenClawGroup:!0},{id:`message`,label:`message`,description:`Send messages`,sectionId:`messaging`,profiles:[`messaging`],includeInOpenClawGroup:!0},{id:`cron`,label:`cron`,description:`Schedule tasks`,sectionId:`automation`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`gateway`,label:`gateway`,description:`Gateway control`,sectionId:`automation`,profiles:[],includeInOpenClawGroup:!0},{id:`nodes`,label:`nodes`,description:`Nodes + devices`,sectionId:`nodes`,profiles:[],includeInOpenClawGroup:!0},{id:`agents_list`,label:`agents_list`,description:`List agents`,sectionId:`agents`,profiles:[],includeInOpenClawGroup:!0},{id:`image`,label:`image`,description:`Image understanding`,sectionId:`media`,profiles:[`coding`],includeInOpenClawGroup:!0},{id:`tts`,label:`tts`,description:`Text-to-speech conversion`,sectionId:`media`,profiles:[],includeInOpenClawGroup:!0}];new Map(U.map(e=>[e.id,e]));function W(e){return U.filter(t=>t.profiles.includes(e)).map(e=>e.id)}var De={minimal:{allow:W(`minimal`)},coding:{allow:W(`coding`)},messaging:{allow:W(`messaging`)},full:{}};function Oe(){let e=new Map;for(let t of U){let n=`group:${t.sectionId}`,r=e.get(n)??[];r.push(t.id),e.set(n,r)}return{"group:openclaw":U.filter(e=>e.includeInOpenClawGroup).map(e=>e.id),...Object.fromEntries(e.entries())}}var ke=Oe(),Ae=[{id:`minimal`,label:`Minimal`},{id:`coding`,label:`Coding`},{id:`messaging`,label:`Messaging`},{id:`full`,label:`Full`}];function je(e){if(!e)return;let t=De[e];if(t&&!(!t.allow&&!t.deny))return{allow:t.allow?[...t.allow]:void 0,deny:t.deny?[...t.deny]:void 0}}function Me(){return Ee.map(e=>({id:e.id,label:e.label,tools:U.filter(t=>t.sectionId===e.id).map(e=>({id:e.id,label:e.label,description:e.description}))})).filter(e=>e.tools.length>0)}var Ne={bash:`exec`,"apply-patch":`apply_patch`},Pe={...ke};function G(e){let t=e.trim().toLowerCase();return Ne[t]??t}function Fe(e){return e?e.map(G).filter(Boolean):[]}function Ie(e){let t=Fe(e),n=[];for(let e of t){let t=Pe[e];if(t){n.push(...t);continue}n.push(e)}return Array.from(new Set(n))}function Le(e){return je(e)}var Re=Me().map(e=>({id:e.id,label:e.label,source:`core`,tools:e.tools.map(e=>({...e,source:`core`,defaultProfiles:[]}))})),ze=Ae.map(e=>({...e}));function Be(e){return(e?e.tools:void 0)??{}}function Ve(e){let t=G(e);if(!t)return{kind:`exact`,value:``};if(t===`*`)return{kind:`all`};if(!t.includes(`*`))return{kind:`exact`,value:t};let n=t.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`);return{kind:`regex`,value:RegExp(`^${n.replaceAll(`\\*`,`.*`)}$`)}}function K(e){return Array.isArray(e)?Ie(e).map(Ve).filter(e=>e.kind!==`exact`||e.value.length>0):[]}function q(e,t){for(let n of t)if(n.kind===`all`||n.kind===`exact`&&e===n.value||n.kind===`regex`&&n.value.test(e))return!0;return!1}function He(e,t){if(!t)return!0;let n=G(e);if(q(n,K(t.deny)))return!1;let r=K(t.allow);return r.length===0||q(n,r)?!0:n===`apply_patch`&&q(`exec`,r)}function J(e,t){if(!Array.isArray(t)||t.length===0)return!1;let n=G(e),r=K(t);return q(n,r)?!0:n===`apply_patch`&&q(`exec`,r)}function Ue(e){return Le(e)??void 0}function Y(e,t,n){let r=He(e,t),i=J(e,n.alsoAllow),a=J(e,n.deny);return{allowed:(r||i)&&!a,baseAllowed:r,denied:a}}function We(e){return e.map(e=>G(e)).filter(e=>e.length>0)}function Ge(e){let t=new Set(We(e.current.alsoAllow)),n=new Set(We(e.current.deny));for(let r of e.toggles){let i=G(r.toolId);i&&(r.enable?(n.delete(i),e.baseAllowed(i)||t.add(i)):(t.delete(i),n.add(i)))}return{alsoAllow:[...t],deny:[...n]}}function Ke(e){let t=e.current?e.current.map(e=>e.trim()).filter(Boolean):null,n=new Set(t??e.allSkills),r=e.skillName.trim();return e.enable?n.add(r):n.delete(r),[...n]}function qe({agent:e}){let t=e.id,n=p(`skills.status`,{agentId:t},{refreshMs:m}),r=f(e=>e.draft),i=f(e=>e.snapshot?.config??null),o=f(e=>e.busy),s=f(e=>e.schema!==null),[c,l]=(0,C.useState)(``),d=r??i,h=B(d,t),g=Array.isArray(h.entry?.skills)?h.entry.skills:void 0,_=new Set((g??[]).map(e=>e.trim()).filter(Boolean)),v=g!==void 0,x=n.data!==null,S=x?n.data?.skills??[]:[],T=b(S,c),E=y(T),D=v?S.filter(e=>_.has(e.name)).length:S.length,O=!!d&&s&&!o,k=e=>{let n=V(d,t);if(n<0)return;let r=[`agents`,`list`,n,`skills`],i=f.getState();e===null?i.removePath(r):i.setPath(r,e)},A=(e,t)=>{let n=e.name.trim();if(!O||!n)return;let r=S.map(e=>e.name).filter(Boolean);k(Ke({current:g??null,allSkills:r,skillName:n,enable:t}))};return(0,w.jsxs)(`div`,{"data-testid":`agent-skills`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Skills`}),(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub`,children:[`Per-agent skill allowlist and workspace skills.`,` `,S.length>0?(0,w.jsxs)(`span`,{className:`ct-mono`,"data-testid":`agent-skills-count`,children:[D,`/`,S.length]}):null]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[(0,w.jsx)(u,{size:`sm`,disabled:!O,"data-testid":`agent-skills-use-all`,onClick:()=>k(null),children:`Use All`}),(0,w.jsx)(u,{size:`sm`,disabled:!O,"data-testid":`agent-skills-disable-all`,onClick:()=>k([]),children:`Disable All`}),(0,w.jsx)(u,{size:`sm`,disabled:n.loading,"data-testid":`agent-skills-refresh`,onClick:n.reload,children:n.loading?`Loading…`:`Refresh`}),(0,w.jsx)(H,{testId:`agent-skills`})]})]}),d?null:(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Load the gateway config to set per-agent skills.`}),(0,w.jsx)(`div`,{className:`ct-agents__callout`,"data-testid":`agent-skills-callout`,children:v?`This agent uses a custom skill allowlist.`:`All skills are enabled. Disabling any skill will create a per-agent allowlist.`}),!x&&!n.loading?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Load skills for this agent to view workspace-specific entries.`}):null,n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null,n.loading&&!n.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading skills…`}):null,(0,w.jsxs)(`div`,{className:`ct-agents__skills-filters`,children:[(0,w.jsx)(`input`,{type:`text`,"aria-label":`Filter skills`,placeholder:`Search skills`,"data-testid":`agent-skills-filter`,value:c,onChange:e=>l(e.target.value)}),(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,"data-testid":`agent-skills-shown`,children:[T.length,` shown`]})]}),x&&T.length===0?(0,w.jsx)(a,{message:`No skills found.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__skills-groups`,children:E.map(e=>(0,w.jsxs)(`details`,{className:`ct-agents__skills-group`,open:!(e.id===`workspace`||e.id===`built-in`),"data-testid":`agent-skill-group-${e.id}`,children:[(0,w.jsxs)(`summary`,{children:[(0,w.jsx)(`span`,{children:e.label}),(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:e.skills.length})]}),(0,w.jsx)(`div`,{className:`ct-agents__skills-list`,children:e.skills.map(e=>(0,w.jsx)(Je,{skill:e,enabled:!v||_.has(e.name),editable:O,onToggle:t=>A(e,t)},e.skillKey))})]},e.id))})]})}function Je({skill:e,enabled:t,editable:n,onToggle:r}){let i=x(e),a=S(e);return(0,w.jsxs)(`div`,{className:`ct-agents__skill-row`,"data-testid":`agent-skill-row-${e.name}`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__skill-main`,children:[(0,w.jsxs)(`span`,{className:`ct-agents__channel-label`,children:[e.emoji?`${e.emoji} `:``,e.name]}),(0,w.jsx)(`span`,{className:`ct-agents__panel-sub`,children:e.description}),(0,w.jsxs)(`span`,{className:`ct-agents__chip-row`,children:[(0,w.jsx)(h,{children:e.source}),(0,w.jsx)(h,{tone:e.eligible?`ok`:`warn`,children:e.eligible?`eligible`:`blocked`}),e.disabled?(0,w.jsx)(h,{tone:`warn`,children:`disabled`}):null]}),i.length>0?(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,children:[`Missing: `,i.join(`, `)]}):null,a.length>0?(0,w.jsxs)(`span`,{className:`ct-agents__panel-sub`,children:[`Reason: `,a.join(`, `)]}):null]}),(0,w.jsx)(`label`,{className:`ct-agents__tool-toggle`,children:(0,w.jsx)(`input`,{type:`checkbox`,"aria-label":`Enable ${e.name}`,checked:t,disabled:!n,onChange:e=>r(e.target.checked)})})]})}var Ye=[{id:`readonly`,label:`Readonly`},{id:`minimal`,label:`Minimal`},{id:`coding`,label:`Coding`},{id:`full`,label:`Full`}];function X(e,t){let n=V(e,t);return n<0?null:[`agents`,`list`,n,`tools`]}function Xe({agent:e}){let t=e.id,n=p(`tools.catalog`,{agentId:t,includePlugins:!0},{refreshMs:3e4}),r=f(e=>e.draft),i=f(e=>e.snapshot?.config??null),a=f(e=>e.busy),o=f(e=>e.schema!==null),s=r??i,c=B(s,t).entry?.tools??{},l=Be(s),d=c.profile??l.profile??`full`,m=c.profile?`agent override`:l.profile?`global default`:`default`,h=c.exec?.preset??l.exec?.preset??null,g=n.data&&n.data.agentId===t?n.data.execPolicy:void 0,_=g?.canExec??`full`,v=Array.isArray(c.allow)&&c.allow.length>0,y=Array.isArray(l.allow)&&l.allow.length>0,b=!!s&&o&&!a&&!v,x=!!s&&o&&!a,S={alsoAllow:v?[]:c.alsoAllow??[],deny:v?[]:c.deny??[]},C=v?{allow:c.allow??[],deny:c.deny??[]}:Ue(d),T=n.data?.groups?.length&&n.data.agentId===t?n.data.groups:Re,E=n.data?.profiles?.length&&n.data.agentId===t?n.data.profiles:ze,D=T.flatMap(e=>e.tools.map(e=>e.id)),O=e=>Y(e,C,S).baseAllowed,k=D.filter(e=>Y(e,C,S).allowed).length,A=e=>{let n=X(s,t);if(!n)return;let r=f.getState();e.alsoAllow.length>0?r.setPath([...n,`alsoAllow`],e.alsoAllow):r.removePath([...n,`alsoAllow`]),e.deny.length>0?r.setPath([...n,`deny`],e.deny):r.removePath([...n,`deny`])},j=(e,t)=>{A(Ge({current:S,baseAllowed:O,toggles:[{toolId:e,enable:t}]}))},M=e=>{A(Ge({current:S,baseAllowed:O,toggles:D.map(t=>({toolId:t,enable:e}))}))},N=(e,n)=>{let r=X(s,t);if(!r)return;let i=f.getState();e?i.setPath([...r,`profile`],e):i.removePath([...r,`profile`]),n&&i.removePath([...r,`allow`])},P=e=>{let n=X(s,t);if(!n)return;let r=f.getState();e?r.setPath([...n,`exec`,`preset`],e):r.removePath([...n,`exec`,`preset`])},F=Y(`exec`,C,S).allowed;return(0,w.jsxs)(`div`,{"data-testid":`agent-tools`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__panel-head`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h3`,{className:`ct-agents__panel-title`,children:`Tool access`}),(0,w.jsxs)(`p`,{className:`ct-agents__panel-sub`,children:[`Profile + per-tool overrides for this agent.`,` `,(0,w.jsxs)(`span`,{className:`ct-mono`,children:[k,`/`,D.length]}),` `,`enabled.`]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[(0,w.jsx)(u,{size:`sm`,disabled:!b,onClick:()=>M(!0),children:`Enable All`}),(0,w.jsx)(u,{size:`sm`,disabled:!b,onClick:()=>M(!1),children:`Disable All`}),(0,w.jsx)(H,{testId:`agent-tools`})]})]}),n.error?(0,w.jsx)(`div`,{className:`ct-agents__callout ct-agents__callout--warn`,role:`status`,children:`Could not load runtime tool catalog. Showing fallback list.`}):null,s?null:(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Load the gateway config to adjust tool profiles.`}),v?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`This agent is using an explicit allowlist in config. Tool overrides are managed in the Config tab.`}):null,y?(0,w.jsx)(`div`,{className:`ct-agents__callout`,children:`Global tools.allow is set. Agent overrides cannot enable tools that are globally blocked.`}):null,F&&g?.canExec===`none`?(0,w.jsx)(`div`,{className:`ct-agents__callout ct-agents__callout--warn`,"data-testid":`agent-tools-exec-none`,children:`Exec tool is enabled but tools.exec security denies every command - pick a preset below or adjust tools.exec.security.`}):null,F&&_===`safebins-only`?(0,w.jsx)(`div`,{className:`ct-agents__callout`,"data-testid":`agent-tools-safebins`,children:`Exec is limited to safe bins; choose a preset to broaden read-only diagnostics.`}):null,(0,w.jsxs)(`div`,{className:`ct-agents__kv-grid ct-agents__kv-grid--tools`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Profile`}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value ct-mono`,"data-testid":`agent-tools-profile`,children:d})]}),(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Source`}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value`,children:m})]}),a?(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Status`}),(0,w.jsx)(`span`,{className:`ct-agents__kv-value ct-mono`,children:`unsaved`})]}):null,g?(0,w.jsxs)(`div`,{className:`ct-agents__kv`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Exec`}),(0,w.jsxs)(`span`,{className:`ct-agents__kv-value ct-mono`,"data-testid":`agent-tools-exec-policy`,children:[g.presetId??g.security,` · `,g.ask,` · `,g.canExec]})]}):null]}),(0,w.jsxs)(`div`,{className:`ct-agents__presets`,"data-testid":`agent-tools-presets`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Quick presets`}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[E.map(e=>(0,w.jsx)(u,{size:`sm`,"aria-pressed":d===e.id,disabled:!b,onClick:()=>N(e.id,!0),children:e.label},e.id)),(0,w.jsx)(u,{size:`sm`,"aria-pressed":!1,disabled:!b,onClick:()=>N(null,!1),children:`Inherit`})]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__presets`,"data-testid":`agent-exec-presets`,children:[(0,w.jsx)(`span`,{className:`ct-agents__kv-label`,children:`Exec policy`}),(0,w.jsxs)(`div`,{className:`ct-agents__button-row`,children:[Ye.map(e=>(0,w.jsx)(u,{size:`sm`,"aria-pressed":h===e.id,disabled:!x,onClick:()=>P(e.id),children:e.label},e.id)),(0,w.jsx)(u,{size:`sm`,"aria-pressed":!1,disabled:!x,onClick:()=>P(null),children:`Inherit`})]})]}),(0,w.jsx)(`div`,{className:`ct-agents__tools-grid`,children:T.map(e=>(0,w.jsxs)(`div`,{className:`ct-agents__tools-section`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__tools-head`,children:[(0,w.jsx)(`span`,{children:e.label}),e.source===`plugin`?(0,w.jsx)(`span`,{className:`ct-mono`,children:`plugin`}):null]}),(0,w.jsx)(`div`,{className:`ct-agents__tools-list`,children:e.tools.map(e=>{let t=e.source===`plugin`?e.pluginId?`plugin:${e.pluginId}`:`plugin`:`core`;return(0,w.jsxs)(`div`,{className:`ct-agents__tool-row`,"data-testid":`agent-tool-${e.id}`,children:[(0,w.jsxs)(`div`,{children:[(0,w.jsxs)(`div`,{className:`ct-agents__tool-title ct-mono`,children:[e.label,(0,w.jsx)(`span`,{className:`ct-agents__tool-source`,children:t}),e.optional===!0?(0,w.jsx)(`span`,{className:`ct-agents__tool-source`,children:`optional`}):null]}),(0,w.jsx)(`div`,{className:`ct-agents__tool-desc`,children:e.description})]}),(0,w.jsx)(`label`,{className:`ct-agents__tool-toggle`,children:(0,w.jsx)(`input`,{type:`checkbox`,"aria-label":`Enable ${e.label}`,checked:Y(e.id,C,S).allowed,disabled:!b,onChange:t=>j(e.id,t.target.checked)})})]},e.id)})})]},e.id))}),n.loading?(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,children:`Refreshing tool catalog…`}):null]})}var Z=[{id:`overview`,label:`Overview`},{id:`files`,label:`Files`},{id:`tools`,label:`Tools`},{id:`skills`,label:`Skills`},{id:`channels`,label:`Channels`},{id:`cron`,label:`Cron jobs`}];function Ze({agent:e,agents:t,defaultId:n,panel:r,onPanelChange:i}){let a=e.id,o=p(`agent.identity.get`,{agentId:a}),c=f(e=>e.draft),l=f(e=>e.snapshot?.config??null),u=c??l,d=o.data&&o.data.agentId===a?o.data:null,m=ee(a,n),g=I(e),v=e.description?.trim()||e.identity?.theme?.trim()||`Agent workspace and routing.`,y=z(e,d),b=R(e,d),x=e.team?.id,S=x===void 0?[]:t.filter(e=>e.team?.id===x&&e.id!==a).toSorted((e,t)=>Number(t.team?.role===`lead`)-Number(e.team?.role===`lead`)),C=ne({agent:e,config:u,filesWorkspace:null,defaultId:n,agentIdentity:d});return(0,w.jsxs)(`div`,{className:`ct-agents__detail`,"data-testid":`agent-detail`,children:[(0,w.jsxs)(`section`,{className:`ct-agents__header`,"data-testid":`agent-header`,children:[(0,w.jsxs)(`div`,{className:`ct-agents__header-main`,children:[(0,w.jsx)(T,{src:y,emoji:b,label:g,large:!0,testId:`agent-avatar`}),(0,w.jsxs)(`div`,{children:[(0,w.jsx)(`h2`,{className:`ct-agents__name`,"data-testid":`agent-name`,children:g}),(0,w.jsx)(`p`,{className:`ct-agents__panel-sub`,"data-testid":`agent-subtitle`,children:v})]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__header-meta`,children:[(0,w.jsx)(`span`,{className:`ct-mono`,"data-testid":`agent-id`,children:a}),e.team?(0,w.jsxs)(h,{tone:`neutral`,children:[e.team.name??e.team.id,` · `,e.team.role]}):null,m?(0,w.jsx)(h,{tone:`accent`,children:m}):null,o.error?(0,w.jsx)(h,{tone:`danger`,children:`identity unavailable`}):null]})]}),(0,w.jsxs)(`div`,{className:`ct-agents__links`,"data-testid":`agent-links`,children:[(0,w.jsx)(_,{to:s.sessions({agent:a}),children:`Sessions`}),(0,w.jsx)(_,{to:s.runs({agent:a}),children:`Runs`}),S.length>0?(0,w.jsxs)(`span`,{className:`ct-agents__team-links`,children:[`Team:`,S.map(e=>(0,w.jsx)(_,{to:s.agent(e.id),children:I(e)},e.id))]}):null]}),(0,w.jsx)(`div`,{className:`ct-agents__tabs`,role:`tablist`,"data-testid":`agent-tabs`,children:Z.map(e=>(0,w.jsx)(`button`,{type:`button`,role:`tab`,"aria-selected":r===e.id,className:`ct-agents__tab${r===e.id?` ct-agents__tab--active`:``}`,onClick:()=>i(e.id),children:e.label},e.id))}),r===`overview`?(0,w.jsx)(Te,{agent:e,defaultId:n,identity:d,identityLoading:o.loading,identityError:o.error}):null,r===`files`?(0,w.jsx)(be,{agentId:a},a):null,r===`tools`?(0,w.jsx)(Xe,{agent:e},a):null,r===`skills`?(0,w.jsx)(qe,{agent:e},a):null,r===`channels`?(0,w.jsx)(pe,{context:C},a):null,r===`cron`?(0,w.jsx)(ye,{agentId:a,context:C},a):null]})}var Q=`Check in`;function $(e){let t=new URL(window.location.href);t.searchParams.set(`agent`,e.agent),e.tab===`overview`?t.searchParams.delete(`tab`):t.searchParams.set(`tab`,e.tab),window.history.replaceState({},``,`${t.pathname}${t.search}`)}function Qe(){let e=c(),t=i(e=>e.request),n=p(`agents.list`,{},{refreshMs:m}),r=n.data?.agents??[],s=n.data?.defaultId??null,[l,h]=(0,C.useState)(()=>Z.find(t=>t.id===e.params.get(`tab`))?.id??`overview`),[_,v]=(0,C.useState)(()=>e.params.get(`agent`)),[y,b]=(0,C.useState)(!1),[x,S]=(0,C.useState)(Q),[T,E]=(0,C.useState)(!1),[D,O]=(0,C.useState)(null),k=(0,C.useRef)(!1),A=(0,C.useRef)(e.params.get(`agent`)),j=(0,C.useRef)(Z.find(t=>t.id===e.params.get(`tab`))?.id??`overview`),M=e.params.get(`agent`);(0,C.useEffect)(()=>{M!==A.current&&(A.current=M,M&&v(M))},[M]);let P=e.params.get(`tab`);(0,C.useEffect)(()=>{let e=Z.find(e=>e.id===P)?.id??`overview`;e!==j.current&&(j.current=e,h(e))},[P]);let F=r.find(e=>e.id===_)??r.find(e=>e.id===s)??r[0]??null;(0,C.useEffect)(()=>{k.current||(k.current=!0,f.getState().load())},[]);let I=e=>{e!==F?.id&&(A.current=e,v(e),$({agent:e,tab:l}))},L=e=>{h(e),j.current=e,F&&$({agent:F.id,tab:e})},R=async()=>{if(!F||T)return;let e=x.trim();if(e){E(!0),O(null);try{await t(`agent.nudge`,{agentId:F.id,text:e}),b(!1),S(Q)}catch(e){O(o(e))}finally{E(!1)}}};return(0,w.jsxs)(`div`,{className:`ct-page`,"data-testid":`agents-view`,children:[(0,w.jsx)(`header`,{className:`ct-page__head`,children:(0,w.jsxs)(`div`,{className:`ct-page__head-text`,children:[(0,w.jsx)(`h1`,{className:`ct-page__title`,children:`Agents`}),(0,w.jsx)(`p`,{className:`ct-page__sub`,children:`Personas, workspaces, tools and schedules.`})]})}),(0,w.jsxs)(`div`,{className:`ct-agents__layout`,children:[(0,w.jsxs)(g,{className:`ct-agents__sidebar`,title:`Agents`,sub:`${r.length} configured.`,actions:(0,w.jsx)(u,{size:`sm`,disabled:!F,"data-testid":`agents-nudge`,onClick:()=>{S(Q),O(null),b(!0)},children:`Nudge agent`}),children:[n.error?(0,w.jsx)(a,{tone:`error`,message:n.error}):null,n.loading&&!n.data?(0,w.jsx)(a,{tone:`loading`,message:`Loading agents…`}):null,n.data&&r.length===0?(0,w.jsx)(a,{message:`No agents found.`}):null,(0,w.jsx)(`div`,{className:`ct-agents__list`,"data-testid":`agent-list`,children:N(r).map(e=>(0,w.jsxs)(`div`,{className:`ct-agents__group`,children:[e.title?(0,w.jsx)(`h3`,{className:`ct-agents__group-title`,"data-testid":`agent-group-${e.teamId}`,children:e.title}):null,e.agents.map(e=>(0,w.jsx)($e,{agent:e,defaultId:s,active:F?.id===e.id,onSelect:()=>I(e.id)},e.id))]},e.teamId??`__ungrouped`))})]}),F?(0,w.jsx)(Ze,{agent:F,agents:r,defaultId:s,panel:l,onPanelChange:L},F.id):(0,w.jsx)(g,{title:`Select an agent`,sub:`Pick an agent to inspect its workspace and tools.`,children:n.data&&r.length===0?(0,w.jsx)(a,{message:`No agents are configured on this gateway.`}):null})]}),(0,w.jsxs)(d,{open:y,title:`Nudge agent`,onClose:()=>b(!1),width:`sm`,footer:(0,w.jsxs)(`div`,{className:`ct-agents__dialog-actions`,children:[(0,w.jsx)(u,{size:`sm`,onClick:()=>b(!1),children:`Cancel`}),(0,w.jsx)(u,{size:`sm`,variant:`primary`,disabled:T||!x.trim(),"data-testid":`agents-nudge-send`,onClick:()=>void R(),children:T?`Sending…`:`Send nudge`})]}),children:[(0,w.jsxs)(`label`,{className:`ct-agents__field`,children:[(0,w.jsx)(`span`,{children:`Message`}),(0,w.jsx)(`textarea`,{"data-testid":`agents-nudge-text`,rows:3,value:x,onChange:e=>S(e.target.value)})]}),D?(0,w.jsx)(`p`,{className:`ct-agents__callout ct-agents__callout--danger`,role:`alert`,children:D}):null]})]})}function $e({agent:e,defaultId:t,active:n,onSelect:r}){let i=I(e),a=ee(e.id,t);return(0,w.jsxs)(`button`,{type:`button`,className:`ct-agents__row${n?` ct-agents__row--active`:``}`,"data-testid":`agent-row-${e.id}`,"aria-current":n?`true`:void 0,onClick:r,children:[(0,w.jsx)(T,{src:z(e,null),emoji:R(e,null),label:i}),(0,w.jsxs)(`span`,{className:`ct-agents__row-info`,children:[(0,w.jsx)(`span`,{className:`ct-agents__row-name`,children:i}),(0,w.jsx)(`span`,{className:`ct-agents__row-id ct-mono`,children:e.id})]}),a?(0,w.jsx)(h,{tone:`accent`,children:a}):null,e.team?.role===`lead`?(0,w.jsx)(h,{tone:`neutral`,children:`lead`}):null,e.userFacing===!1?(0,w.jsx)(h,{tone:`neutral`,children:`internal`}):null]})}export{Qe as default};