tide-commander 1.201.0 → 1.202.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (125) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/dist/assets/{AudioPlayer-jjttJ6SM.js → AudioPlayer-B7nGfgjR.js} +1 -1
  3. package/dist/assets/{BossLogsModal-DF0ar9g6.js → BossLogsModal-B2hKgPKR.js} +1 -1
  4. package/dist/assets/{BossSpawnModal-rJfm0Ijw.js → BossSpawnModal-smufSfcS.js} +1 -1
  5. package/dist/assets/ControlsModal-DFwNI_sS.js +1 -0
  6. package/dist/assets/{DockerLogsModal-ChSWCsD6.js → DockerLogsModal-CgpZgKz5.js} +1 -1
  7. package/dist/assets/{EmbeddedEditor-ChdfmuIg.js → EmbeddedEditor-B6e6Tjab.js} +1 -1
  8. package/dist/assets/{FcStdViewer-CdhcfLu8.js → FcStdViewer-Cvp018yY.js} +1 -1
  9. package/dist/assets/{GcodeViewer-CG5xftum.js → GcodeViewer-BkGC_S8k.js} +1 -1
  10. package/dist/assets/{GlbViewer-DvmBSNPm.js → GlbViewer-ksrBWqeR.js} +1 -1
  11. package/dist/assets/{GmailOAuthSetup-yhSITtw7.js → GmailOAuthSetup-CzIkxjus.js} +1 -1
  12. package/dist/assets/{GoogleOAuthSetup-ugg8hhwa.js → GoogleOAuthSetup-DfGNwK7j.js} +1 -1
  13. package/dist/assets/{IframeModal-Bjo_-SSc.js → IframeModal-BpLhEygR.js} +1 -1
  14. package/dist/assets/{IntegrationsPanel-JbfEFuTE.js → IntegrationsPanel-Bjemwaaf.js} +2 -2
  15. package/dist/assets/{LogViewerModal-CGGtQwwn.js → LogViewerModal-BN-2fkaY.js} +1 -1
  16. package/dist/assets/{MonitoringModal-D7VxK2C8.js → MonitoringModal-DOXLXC2b.js} +1 -1
  17. package/dist/assets/{PM2LogsModal-C-Ec4p65.js → PM2LogsModal-rbMVcXlW.js} +1 -1
  18. package/dist/assets/{RestoreArchivedAreaModal-BBZpQw8I.js → RestoreArchivedAreaModal-zP0f1MJs.js} +1 -1
  19. package/dist/assets/{Scene2DCanvas-Cpzgqdq1.js → Scene2DCanvas-o7560L-a.js} +1 -1
  20. package/dist/assets/{SceneManager-B9bEzlSi.js → SceneManager-BgDfVg6I.js} +1 -1
  21. package/dist/assets/{SkillsPanel-crpQci9P.js → SkillsPanel-CjPjIaWc.js} +2 -2
  22. package/dist/assets/{SlackMultiInstanceSetup-C1qkAM8r.js → SlackMultiInstanceSetup-DD_rPcgV.js} +1 -1
  23. package/dist/assets/SpawnModal-D8AMFrPu.js +1 -0
  24. package/dist/assets/{StatisticsModal-B14YGD66.js → StatisticsModal-Cj-JYH7n.js} +1 -1
  25. package/dist/assets/{StlViewer-D5EtQxO4.js → StlViewer-BTqw22H9.js} +1 -1
  26. package/dist/assets/{SubordinateAssignmentModal-_8NWXgEl.js → SubordinateAssignmentModal-BWeToc-Y.js} +1 -1
  27. package/dist/assets/{ThreeAreaSelector-Bnb65bJt.js → ThreeAreaSelector-BfXBY8Zd.js} +1 -1
  28. package/dist/assets/{ThreeViewShortcuts-AI4Mj9zr.js → ThreeViewShortcuts-BGgmAwlu.js} +1 -1
  29. package/dist/assets/{TriggerManagerPanel-aFrbWG0D.js → TriggerManagerPanel-C_jBXs4k.js} +1 -1
  30. package/dist/assets/{VideoPlayer-BSVjpcQa.js → VideoPlayer-C-ciwgiq.js} +1 -1
  31. package/dist/assets/{WorkflowEditorPanel-CgFXTubk.js → WorkflowEditorPanel-D09rBihK.js} +1 -1
  32. package/dist/assets/{abnfDiagram-VRR7QNED-LbVlypD7.js → abnfDiagram-VRR7QNED-Hvauvwpv.js} +1 -1
  33. package/dist/assets/{arc-DDqZ78fN.js → arc-8xGuxuLE.js} +1 -1
  34. package/dist/assets/{architectureDiagram-ZJ3FMSHR-BLfa7hLc.js → architectureDiagram-ZJ3FMSHR-DckJ-9FC.js} +1 -1
  35. package/dist/assets/{area-logos-ml30JJUi.js → area-logos-DKkCiybZ.js} +1 -1
  36. package/dist/assets/{blockDiagram-677ZJIJ3-CHWx5n03.js → blockDiagram-677ZJIJ3-DAJq6nFY.js} +1 -1
  37. package/dist/assets/{c4Diagram-LMCZKHZV-DvUxK9_Q.js → c4Diagram-LMCZKHZV-PGJGoAsg.js} +1 -1
  38. package/dist/assets/channel-BhAHX260.js +1 -0
  39. package/dist/assets/{chunk-2Q5K7J3B-BFtzwIJU.js → chunk-2Q5K7J3B-D1sP2fsh.js} +1 -1
  40. package/dist/assets/{chunk-32BRIVSS-CPbVoclL.js → chunk-32BRIVSS-RLL4h20T.js} +1 -1
  41. package/dist/assets/{chunk-5VM5RSS4-dTYGN5E5.js → chunk-5VM5RSS4-CevkAGFw.js} +1 -1
  42. package/dist/assets/{chunk-EX3LRPZG-CtqfsWRW.js → chunk-EX3LRPZG-D819msSu.js} +1 -1
  43. package/dist/assets/{chunk-JWPE2WC7-Bk6bqjv9.js → chunk-JWPE2WC7-CrfN0IY7.js} +1 -1
  44. package/dist/assets/{chunk-MOJQB5TN-UYfo6GD_.js → chunk-MOJQB5TN-BZ7Xp1xZ.js} +1 -1
  45. package/dist/assets/{chunk-RYQCIY6F-C8_6Iuf_.js → chunk-RYQCIY6F-w0k8a4aN.js} +1 -1
  46. package/dist/assets/{chunk-V7JOEXUC-CGdZK5My.js → chunk-V7JOEXUC-CR2m_ZLP.js} +1 -1
  47. package/dist/assets/{chunk-VR4S4FIN-C-HH5QTv.js → chunk-VR4S4FIN-BCJR0sNP.js} +1 -1
  48. package/dist/assets/{chunk-XXDRQBXY-B2n8y5qo.js → chunk-XXDRQBXY-BhsJv5YE.js} +1 -1
  49. package/dist/assets/classDiagram-OUVF2IWQ-DbI_Lbd-.js +1 -0
  50. package/dist/assets/classDiagram-v2-EOCWNBFH-DbI_Lbd-.js +1 -0
  51. package/dist/assets/compacting-bar.webp +0 -0
  52. package/dist/assets/{cose-bilkent-JH36ORCC-AB1HxIBy.js → cose-bilkent-JH36ORCC-BSXhVj_l.js} +1 -1
  53. package/dist/assets/{cynefin-VYW2F7L2-DTS_6pNv.js → cynefin-VYW2F7L2-D1Tm3Vt0.js} +1 -1
  54. package/dist/assets/{cynefinDiagram-TSTJHNR4-0oJZvAZy.js → cynefinDiagram-TSTJHNR4-DcvA_MXZ.js} +1 -1
  55. package/dist/assets/{dagre-VKFMJZFB-mOn_d4U5.js → dagre-VKFMJZFB-6I-LwvhB.js} +1 -1
  56. package/dist/assets/{diagram-FQU43EPY-DqHifujZ.js → diagram-FQU43EPY-BppVFL1M.js} +1 -1
  57. package/dist/assets/{diagram-G47NLZAW-BZ7eUs_p.js → diagram-G47NLZAW-BLGUCT6E.js} +1 -1
  58. package/dist/assets/{diagram-NH7WQ7WH-C3r43VXW.js → diagram-NH7WQ7WH-CEYltb_-.js} +1 -1
  59. package/dist/assets/{diagram-OA4YK3LP-D2RSBPAX.js → diagram-OA4YK3LP-B1EWuzbE.js} +1 -1
  60. package/dist/assets/{diagram-WEI45ONY-B9Nkjrlq.js → diagram-WEI45ONY-LDSoBbk8.js} +1 -1
  61. package/dist/assets/{ebnfDiagram-CCIWWBDH-B1RDvi6g.js → ebnfDiagram-CCIWWBDH-E4wZGnSz.js} +1 -1
  62. package/dist/assets/{erDiagram-Q63AITRT-B38eKAG5.js → erDiagram-Q63AITRT-Cmuko4DT.js} +1 -1
  63. package/dist/assets/{flowDiagram-23GEKE2U-C9txCjHm.js → flowDiagram-23GEKE2U-DZ_8svqD.js} +1 -1
  64. package/dist/assets/{ganttDiagram-NO4QXBWP-BGNoppCl.js → ganttDiagram-NO4QXBWP-BR4hcxxf.js} +1 -1
  65. package/dist/assets/{gitGraphDiagram-IHSO6WYX-qrryYqaT.js → gitGraphDiagram-IHSO6WYX-DKgytJlK.js} +1 -1
  66. package/dist/assets/{index-Drtp5UPa.js → index-B-Ykv2WD.js} +1 -1
  67. package/dist/assets/{index-CKVTIr6G.js → index-BBw8GgfS.js} +1 -1
  68. package/dist/assets/{index-ClvYehMs.js → index-BNbxKAb4.js} +1 -1
  69. package/dist/assets/index-Bbsb_wWh.css +1 -0
  70. package/dist/assets/index-CVEV_ET-.js +2 -0
  71. package/dist/assets/{index-BXNPTpxx.js → index-CXv8ZS0v.js} +5 -5
  72. package/dist/assets/{index-B4sdd8Y2.js → index-Ccq9kwRk.js} +1 -1
  73. package/dist/assets/{index-tE736Avl.js → index-DrxGAsVW.js} +1 -1
  74. package/dist/assets/index-MEQRanWH.js +2 -0
  75. package/dist/assets/{index-CYxytlNP.js → index-h-ZJIMFv.js} +3 -3
  76. package/dist/assets/{infoDiagram-FWYZ7A6U-DilAR8go.js → infoDiagram-FWYZ7A6U-IupeIGNJ.js} +1 -1
  77. package/dist/assets/{ishikawaDiagram-FXEZZL3T-B0cTGbt1.js → ishikawaDiagram-FXEZZL3T-BgnsuPSR.js} +1 -1
  78. package/dist/assets/{journeyDiagram-5HDEW3XC-eHbpGFin.js → journeyDiagram-5HDEW3XC-DH2sCeMM.js} +1 -1
  79. package/dist/assets/{kanban-definition-HUTT4EX6-BaSQRYl7.js → kanban-definition-HUTT4EX6-Wb6HQDBS.js} +1 -1
  80. package/dist/assets/{linear-BoUClmXF.js → linear-q6sA2iAt.js} +1 -1
  81. package/dist/assets/main-33HX-Nre.js +341 -0
  82. package/dist/assets/main-l3t22cX-.css +1 -0
  83. package/dist/assets/{mermaid.core-CGrC54u1.js → mermaid.core-DE8C8qk_.js} +4 -4
  84. package/dist/assets/{mindmap-definition-LN4V7U3C-BQWnb1yP.js → mindmap-definition-LN4V7U3C-Bs8A2u-b.js} +1 -1
  85. package/dist/assets/{pegDiagram-2B236MQR-Bs_4Go2e.js → pegDiagram-2B236MQR-CXEy-5xS.js} +1 -1
  86. package/dist/assets/{pieDiagram-ENE6RG2P-LCcCZeX5.js → pieDiagram-ENE6RG2P-0KEHZ6Qu.js} +1 -1
  87. package/dist/assets/{quadrantDiagram-ABIIQ3AL-CdlG1WsA.js → quadrantDiagram-ABIIQ3AL-B4ua4DRe.js} +1 -1
  88. package/dist/assets/{railroadDiagram-RFXS5EU6-CAcrzOwC.js → railroadDiagram-RFXS5EU6-BmumxmaP.js} +1 -1
  89. package/dist/assets/{requirementDiagram-TGXJPOKE-zgaCBhns.js → requirementDiagram-TGXJPOKE-BL46wZ-t.js} +1 -1
  90. package/dist/assets/{sankeyDiagram-HTMAVEWB-Cvn05yAi.js → sankeyDiagram-HTMAVEWB-DF7DCX_x.js} +1 -1
  91. package/dist/assets/{sequenceDiagram-DBY2YBRQ-C7oW7B56.js → sequenceDiagram-DBY2YBRQ-7ZltWf-f.js} +1 -1
  92. package/dist/assets/{sizeCapture-X5ZJPWSS-Z61MsHMO.js → sizeCapture-X5ZJPWSS-D-2cB5F9.js} +1 -1
  93. package/dist/assets/{stateDiagram-2N3HPSRC-CHjZ2LvZ.js → stateDiagram-2N3HPSRC-CIUa3aAc.js} +1 -1
  94. package/dist/assets/stateDiagram-v2-6OUMAXLB-B-vNeHDE.js +1 -0
  95. package/dist/assets/{swimlanes-5IMT3BWC-BOxFXKKq.js → swimlanes-5IMT3BWC-B-cxeKvb.js} +2 -2
  96. package/dist/assets/swimlanesDiagram-G3AALYLV-DMAH0FoM.js +8 -0
  97. package/dist/assets/{timeline-definition-FHXFAJF6-7Hw_U3c1.js → timeline-definition-FHXFAJF6-O6fJ1p9n.js} +1 -1
  98. package/dist/assets/{vennDiagram-L72KCM5P-DXOydhCz.js → vennDiagram-L72KCM5P-BiV5ZylZ.js} +1 -1
  99. package/dist/assets/{wardleyDiagram-EHGQE667-CHEopdXj.js → wardleyDiagram-EHGQE667-E4l00yC2.js} +1 -1
  100. package/dist/assets/{web-vmnQRY1J.js → web-CUkMR96i.js} +1 -1
  101. package/dist/assets/{web-BNIDHx-H.js → web-CfYEEkSC.js} +1 -1
  102. package/dist/assets/{web-DAWG2rda.js → web-DZ5Y-yBU.js} +1 -1
  103. package/dist/assets/{xychartDiagram-FW5EYKEG-BpNrwdIN.js → xychartDiagram-FW5EYKEG-B922Z30u.js} +1 -1
  104. package/dist/build-info.json +1 -1
  105. package/dist/index.html +2 -2
  106. package/dist/src/packages/server/claude/session-loader.js +128 -0
  107. package/dist/src/packages/server/grok/session-watcher.js +24 -0
  108. package/dist/src/packages/server/routes/agents.js +11 -8
  109. package/dist/src/packages/server/routes/sessions.js +25 -1
  110. package/dist/src/packages/server/routes/system.js +13 -0
  111. package/dist/src/packages/server/services/grok-usage-service.js +13 -3
  112. package/dist/src/packages/server/services/opencode-usage-service.js +49 -0
  113. package/package.json +1 -1
  114. package/dist/assets/ControlsModal-D4JLnO36.js +0 -1
  115. package/dist/assets/SpawnModal-CIuJWY6N.js +0 -1
  116. package/dist/assets/channel-CxofHie1.js +0 -1
  117. package/dist/assets/classDiagram-OUVF2IWQ-15eANucY.js +0 -1
  118. package/dist/assets/classDiagram-v2-EOCWNBFH-15eANucY.js +0 -1
  119. package/dist/assets/index-BdQoxlnS.js +0 -2
  120. package/dist/assets/index-BoiyspB0.js +0 -2
  121. package/dist/assets/index-DV4NCFbu.css +0 -1
  122. package/dist/assets/main-BdVckSM5.css +0 -1
  123. package/dist/assets/main-DuaHyH5t.js +0 -341
  124. package/dist/assets/stateDiagram-v2-6OUMAXLB-ePlfPVZw.js +0 -1
  125. package/dist/assets/swimlanesDiagram-G3AALYLV-ClgJ2Bw0.js +0 -8
@@ -7,7 +7,7 @@
7
7
  * an optional `cwd` to support cross-project attach.
8
8
  */
9
9
  import { Router } from 'express';
10
- import { listAllSessions, searchAllSessions, loadSession, loadSessionAroundMatch } from '../claude/session-loader.js';
10
+ import { getSessionRestoreMetadata, listAllSessions, searchAllSessions, loadSession, loadSessionAroundMatch, } from '../claude/session-loader.js';
11
11
  import { findAgentIdBySessionId } from '../services/agent-service.js';
12
12
  import { createLogger } from '../utils/logger.js';
13
13
  const log = createLogger('Routes');
@@ -27,6 +27,8 @@ router.get('/global', async (req, res) => {
27
27
  messageCount: s.messageCount,
28
28
  firstPrompt: s.firstPrompt,
29
29
  sizeBytes: s.sizeBytes,
30
+ provider: s.provider,
31
+ agentId: findAgentIdBySessionId(s.sessionId) ?? undefined,
30
32
  })),
31
33
  });
32
34
  }
@@ -70,6 +72,28 @@ router.get('/search', async (req, res) => {
70
72
  res.status(500).json({ error: err.message });
71
73
  }
72
74
  });
75
+ // GET /api/sessions/restore-metadata?cwd=...&sessionId=...
76
+ // Lightweight, on-demand settings lookup used before opening the new-agent modal.
77
+ router.get('/restore-metadata', (req, res) => {
78
+ try {
79
+ const cwd = req.query.cwd || '';
80
+ const sessionId = req.query.sessionId || '';
81
+ if (!cwd || !sessionId) {
82
+ res.status(400).json({ error: 'Both "cwd" and "sessionId" query parameters are required' });
83
+ return;
84
+ }
85
+ const metadata = getSessionRestoreMetadata(cwd, sessionId);
86
+ if (!metadata) {
87
+ res.status(404).json({ error: 'Session not found' });
88
+ return;
89
+ }
90
+ res.json(metadata);
91
+ }
92
+ catch (err) {
93
+ log.error(' Failed to load session restore metadata:', err);
94
+ res.status(500).json({ error: err.message });
95
+ }
96
+ });
73
97
  // GET /api/sessions/preview?cwd=...&sessionId=...&limit=30&q=...
74
98
  // With `q`, the returned window is anchored on the most recent matching
75
99
  // message instead of the tail, so the preview actually shows the hit.
@@ -15,6 +15,7 @@ import { isDevInstall, maybeTriggerWebBundleRebuild } from '../services/web-bund
15
15
  import { deleteClaudeCredentialProfile, getClaudeCredentialProfilesUsage, listClaudeCredentialProfiles, renameClaudeCredentialProfile, saveActiveClaudeCredentialProfile, switchClaudeCredentialProfile, } from '../services/claude-credentials-service.js';
16
16
  import { deleteProviderCredentialProfile, listProviderCredentialProfiles, renameProviderCredentialProfile, saveActiveProviderCredentialProfile, switchProviderCredentialProfile, } from '../services/provider-credentials-service.js';
17
17
  import { getCodexCredentialProfilesUsage } from '../services/codex-usage-service.js';
18
+ import { getGrokAccountRateLimits } from '../services/grok-usage-service.js';
18
19
  import { deletePiCredentialProfile, getPiCredentialProfilesUsage, listPiCredentialProfiles, renamePiCredentialProfile, saveActivePiCredentialProfile, switchPiCredentialProfile, } from '../services/pi-subscription-usage-service.js';
19
20
  import { killDetachedAppServerDaemon } from '../codex/app-server/app-server-process.js';
20
21
  const log = createLogger('SystemRoutes');
@@ -508,6 +509,18 @@ router.get('/claude-credentials/usage', async (_req, res) => {
508
509
  res.status(500).json({ error: message });
509
510
  }
510
511
  });
512
+ /** Active Grok account weekly/monthly quota for pre-spawn model previews. */
513
+ router.get('/grok-credentials/usage', async (_req, res) => {
514
+ try {
515
+ const result = await getGrokAccountRateLimits();
516
+ res.json({ ...result, fetchedAt: Date.now() });
517
+ }
518
+ catch (err) {
519
+ const message = err.message;
520
+ log.error(`Failed to fetch Grok credentials usage: ${message}`);
521
+ res.status(500).json({ error: message });
522
+ }
523
+ });
511
524
  router.post('/claude-credentials/switch', (req, res) => {
512
525
  try {
513
526
  const name = req.body?.name;
@@ -206,6 +206,16 @@ export function parseCreditsConfig(config) {
206
206
  }
207
207
  }
208
208
  }
209
+ // Grok 1.0.3 omits both creditUsagePercent and productUsage when a unified-
210
+ // billing period has consumed zero quota. Its own /usage screen renders that
211
+ // exact payload as 0%, so mirror the CLI instead of reporting unavailable.
212
+ if (!weekly && !monthly && percent == null && periodEnd && config.isUnifiedBillingUser === true) {
213
+ const window = { utilization: 0, resetsAt: periodEnd };
214
+ if (kind === 'monthly')
215
+ monthly = window;
216
+ else
217
+ weekly = window;
218
+ }
209
219
  const onDemandCap = unwrapVal(config.onDemandCap);
210
220
  const onDemandUsed = unwrapVal(config.onDemandUsed) ?? 0;
211
221
  if (onDemandCap != null && onDemandCap > 0) {
@@ -237,7 +247,7 @@ export function parseSpendConfig(config) {
237
247
  }
238
248
  /**
239
249
  * Raw network calls to the CLI chat-proxy billing endpoints. Prefer
240
- * `getGrokRateLimits()` which caches + single-flights.
250
+ * `getGrokAccountRateLimits()` which caches + single-flights.
241
251
  */
242
252
  async function fetchGrokBillingFromApi(accessToken) {
243
253
  const creds = accessToken ? { token: accessToken } : readGrokAccessToken();
@@ -320,7 +330,7 @@ export async function fetchGrokRateLimitsForToken(token) {
320
330
  let rateLimitCache = null;
321
331
  let lastGoodRateLimits = null;
322
332
  let rateLimitInFlight = null;
323
- async function getGrokRateLimits() {
333
+ export async function getGrokAccountRateLimits() {
324
334
  const now = Date.now();
325
335
  if (rateLimitCache && now < rateLimitCache.validUntil) {
326
336
  return { rateLimits: rateLimitCache.rateLimits, error: rateLimitCache.error };
@@ -361,7 +371,7 @@ export function resetGrokRateLimitCache() {
361
371
  rateLimitInFlight = null;
362
372
  }
363
373
  export async function buildGrokUsageSnapshot(agent) {
364
- const { rateLimits, error: rateLimitsError } = await getGrokRateLimits();
374
+ const { rateLimits, error: rateLimitsError } = await getGrokAccountRateLimits();
365
375
  return {
366
376
  provider: 'grok',
367
377
  fetchedAt: Date.now(),
@@ -0,0 +1,49 @@
1
+ import { getPiCredentialProfilesUsage, } from './pi-subscription-usage-service.js';
2
+ function modelProvider(model) {
3
+ const slash = model?.indexOf('/') ?? -1;
4
+ return slash > 0 ? model.slice(0, slash) : null;
5
+ }
6
+ /**
7
+ * Usage for native OpenCode agents is determined by the selected model's own
8
+ * provider. OpenCode's built-in `opencode/*-free` pool is dynamic/unmetered and
9
+ * intentionally has no published weekly quota. OpenCode Go uses the same
10
+ * authenticated usage endpoint and credential as Pi's opencode-go provider.
11
+ */
12
+ export async function buildOpencodeUsageSnapshot(agent) {
13
+ const provider = modelProvider(agent.opencodeModel);
14
+ let plan = 'unavailable';
15
+ let quotaWindows = [];
16
+ let rateLimitsError = null;
17
+ let cliHint = 'This OpenCode model provider does not expose subscription usage.';
18
+ if (provider === 'opencode') {
19
+ plan = 'free';
20
+ cliHint = 'OpenCode free-model capacity is dynamic; no weekly quota percentage is published.';
21
+ }
22
+ else if (provider === 'opencode-go') {
23
+ plan = 'go';
24
+ const profiles = await getPiCredentialProfilesUsage('opencode-go');
25
+ const active = profiles.usage.find((entry) => entry.id === 'active');
26
+ quotaWindows = active?.quotaWindows ?? [];
27
+ rateLimitsError = active?.error ?? (active ? null : 'No active OpenCode Go credential');
28
+ cliHint = rateLimitsError
29
+ ? rateLimitsError
30
+ : 'OpenCode Go active-account subscription limits.';
31
+ }
32
+ return {
33
+ provider: 'opencode',
34
+ fetchedAt: Date.now(),
35
+ modelProvider: provider,
36
+ plan,
37
+ session: {
38
+ tokensUsed: agent.tokensUsed ?? 0,
39
+ contextUsed: agent.contextUsed ?? 0,
40
+ contextLimit: agent.contextLimit ?? 200_000,
41
+ taskCount: agent.taskCount ?? 0,
42
+ lastActivity: agent.lastActivity ?? 0,
43
+ },
44
+ rateLimits: null,
45
+ quotaWindows,
46
+ rateLimitsError,
47
+ cliHint,
48
+ };
49
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tide-commander",
3
- "version": "1.201.0",
3
+ "version": "1.202.0",
4
4
  "description": "Visual multi-agent orchestrator and manager for Claude Code with 3D/2D interface",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1 +0,0 @@
1
- import{u as K,Q,z as J,R as W,T as ee,r as u,U as se,g as te,V as D,W as A,X as ae,j as e,Y as ne,Z as re,s as g,_ as R,$ as V}from"./main-DuaHyH5t.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DYBBrXTx.js";const G={global:"terminal:controls.contextGlobal",commander:"terminal:controls.contextCommander",toolbox:"terminal:controls.contextToolbox"},le={global:"terminal:controls.contextGlobalDesc",commander:"terminal:controls.contextCommanderDesc",toolbox:"terminal:controls.contextToolboxDesc"},U={camera:["camera-pan","camera-orbit","camera-rotate","camera-zoom","camera-tilt"],interaction:["primary-action","selection-box","context-menu","move-command"]},oe={camera:"terminal:controls.cameraControls",interaction:"terminal:controls.interaction"};function pe({isOpen:s,onClose:r}){const{t:a}=K(["terminal","common"]),l=Q(),o=J(),h=W(),N=ee(),[x,C]=u.useState("keyboard"),[b,v]=u.useState(""),[p,j]=u.useState("all"),[m,f]=u.useState(!1),[c,d]=u.useState(null),[k,w]=u.useState(null),Y=se.useRef(null),{handleMouseDown:X,handleClick:Z}=te(r);if(u.useEffect(()=>{if(!s||m)return;const t=n=>{n.key==="Escape"&&(n.preventDefault(),n.stopPropagation(),r())};return document.addEventListener("keydown",t,!0),()=>document.removeEventListener("keydown",t,!0)},[s,r,m]),u.useEffect(()=>{s||(v(""),f(!1),d(null))},[s]),u.useEffect(()=>{if(!s||!m)return;const t=n=>{if(n.key==="Escape"){n.preventDefault(),n.stopPropagation(),f(!1),d(null);return}if(["Control","Alt","Shift","Meta"].includes(n.key))return;n.preventDefault(),n.stopPropagation();let i=n.key;n.code.startsWith("Key")&&n.code.length===4?i=n.code.charAt(3).toLowerCase():n.code.startsWith("Digit")&&n.code.length===6?i=n.code.charAt(5):n.code==="Space"&&(i="Space"),d({key:i,modifiers:{ctrl:n.ctrlKey,alt:n.altKey,shift:n.shiftKey,meta:n.metaKey}})};return document.addEventListener("keydown",t,!0),()=>document.removeEventListener("keydown",t,!0)},[s,m]),!s)return null;const F=l.filter(t=>{const n=a(`terminal:controls.shortcuts.${t.id}.name`,{defaultValue:t.name}),i=a(`terminal:controls.shortcuts.${t.id}.description`,{defaultValue:t.description});if(m&&c){const z=S=>S===" "||S==="Space"?"Space":S.length===1?S.toLowerCase():S,B=z(t.key),L=z(c.key);if(!(L.length===1&&/^[a-zA-Z]$/.test(B)?`Key${B.toUpperCase()}`==`Key${L.toUpperCase()}`:B===L))return!1;const M=t.modifiers,T=c.modifiers;return(M.ctrl||!1)===(T.ctrl||!1)&&(M.alt||!1)===(T.alt||!1)&&(M.shift||!1)===(T.shift||!1)&&(M.meta||!1)===(T.meta||!1)}if(!b)return!0;const y=b.toLowerCase();return n.toLowerCase().includes(y)||i.toLowerCase().includes(y)||D(t).toLowerCase().includes(y)}),E=Array.from(o.values()).map(t=>t).filter(t=>t.shortcut&&t.shortcut.trim().length>0).filter(t=>{const n=A(t.shortcut).toLowerCase();if(m&&c){const y={key:c.key,code:c.key.length===1&&/^[a-zA-Z]$/.test(c.key)?`Key${c.key.toUpperCase()}`:c.key.length===1&&/^[0-9]$/.test(c.key)?`Digit${c.key}`:c.key==="Space"?"Space":c.key,ctrlKey:!!c.modifiers.ctrl,altKey:!!c.modifiers.alt,shiftKey:!!c.modifiers.shift,metaKey:!!c.modifiers.meta};return ae(y,t.shortcut)}if(!b)return!0;const i=b.toLowerCase();return t.name.toLowerCase().includes(i)||n.toLowerCase().includes(i)}),P=F.reduce((t,n)=>(t[n.context]||(t[n.context]=[]),t[n.context].push(n),t),{}),_=(t,n)=>{g.updateShortcut(t,n)},$=()=>{w(x)},I=()=>{k==="keyboard"?g.resetShortcuts():(k==="mouse"||k==="trackpad")&&g.resetMouseControls()},q=k==="keyboard"?"terminal:controls.confirmResetKeyboard":k==="mouse"?"terminal:controls.confirmResetMouse":"terminal:controls.confirmResetTrackpad",O=["global","commander","toolbox"],H=h.bindings.reduce((t,n)=>(U.camera.includes(n.action)?t.camera.push(n):U.interaction.includes(n.action)&&t.interaction.push(n),t),{camera:[],interaction:[]});return e.jsxs("div",{className:"shortcuts-modal-overlay",onMouseDown:X,onClick:Z,children:[e.jsxs("div",{className:"shortcuts-modal controls-modal",children:[e.jsxs("div",{className:"shortcuts-modal-header",children:[e.jsxs("div",{className:"shortcuts-modal-title",children:[e.jsxs("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("circle",{cx:"12",cy:"12",r:"3"}),e.jsx("path",{d:"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1-2.83 2.83l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-4 0v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1 0-4h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 2.83-2.83l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 4 0v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 0 4h-.09a1.65 1.65 0 0 0-1.51 1z"})]}),e.jsx("span",{children:a("terminal:controls.title")})]}),e.jsx("button",{className:"shortcuts-modal-close",onClick:r,children:"×"})]}),e.jsxs("div",{className:"controls-main-tabs",children:[e.jsxs("button",{className:`controls-main-tab ${x==="keyboard"?"active":""}`,onClick:()=>C("keyboard"),children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2"}),e.jsx("path",{d:"M6 8h.01M10 8h.01M14 8h.01M18 8h.01M6 12h.01M18 12h.01M8 16h8"})]}),a("terminal:controls.keyboard")]}),e.jsxs("button",{className:`controls-main-tab ${x==="mouse"?"active":""}`,onClick:()=>C("mouse"),children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"6",y:"3",width:"12",height:"18",rx:"6"}),e.jsx("line",{x1:"12",y1:"7",x2:"12",y2:"11"})]}),a("terminal:controls.mouse")]}),e.jsxs("button",{className:`controls-main-tab ${x==="trackpad"?"active":""}`,onClick:()=>C("trackpad"),children:[e.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2"}),e.jsx("circle",{cx:"12",cy:"12",r:"3"})]}),a("terminal:controls.trackpad")]})]}),x==="keyboard"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"shortcuts-modal-toolbar",children:[m?e.jsxs("div",{className:"shortcuts-search find-by-shortcut-active",children:[e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2"}),e.jsx("path",{d:"M6 8h.01M10 8h.01M14 8h.01M18 8h.01M6 12h.01M18 12h.01M8 16h8"})]}),c?e.jsxs("span",{className:"find-by-shortcut-display",children:[D({key:c.key,modifiers:c.modifiers}),e.jsx("button",{className:"shortcuts-search-clear",onClick:()=>d(null),children:"×"})]}):e.jsx("span",{className:"find-by-shortcut-prompt",children:a("terminal:controls.pressKeyCombination")})]}):e.jsxs("div",{className:"shortcuts-search",children:[e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("circle",{cx:"11",cy:"11",r:"8"}),e.jsx("path",{d:"M21 21l-4.35-4.35"})]}),e.jsx("input",{ref:Y,type:"text",placeholder:a("terminal:controls.searchShortcuts"),value:b,onChange:t=>v(t.target.value),autoFocus:!0}),b&&e.jsx("button",{className:"shortcuts-search-clear",onClick:()=>v(""),children:"×"})]}),e.jsx("button",{className:`shortcuts-find-by-key-btn ${m?"active":""}`,onClick:()=>{f(!m),d(null),v("")},title:a(m?"terminal:controls.switchToTextSearch":"terminal:controls.findByPressingKeys"),children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"2",y:"4",width:"20",height:"16",rx:"2"}),e.jsx("path",{d:"M6 8h.01M10 8h.01M14 8h.01M18 8h.01M6 12h.01M18 12h.01M8 16h8"})]})}),e.jsx("button",{className:"shortcuts-reset-all-btn",onClick:$,children:a("common:buttons.reset")})]}),e.jsxs("div",{className:"shortcuts-context-tabs",children:[e.jsxs("button",{className:`shortcuts-context-tab ${p==="all"?"active":""}`,onClick:()=>j("all"),children:[a("common:labels.all"),e.jsx("span",{className:"shortcuts-context-tab-count",children:F.length})]}),O.map(t=>{var i;const n=((i=P[t])==null?void 0:i.length)||0;return e.jsxs("button",{className:`shortcuts-context-tab ${p===t?"active":""}`,onClick:()=>j(t),children:[a(G[t]),e.jsx("span",{className:"shortcuts-context-tab-count",children:n})]},t)})]}),e.jsxs("div",{className:"shortcuts-modal-content",children:[O.map(t=>{const n=P[t]||[];return n.length===0||p!=="all"&&p!==t?null:e.jsxs("div",{className:"shortcuts-context-group",children:[p==="all"&&e.jsxs("div",{className:"shortcuts-context-header",children:[e.jsx("span",{className:"shortcuts-context-label",children:a(G[t])}),e.jsx("span",{className:"shortcuts-context-description",children:a(le[t])})]}),e.jsx("div",{className:"shortcuts-grid",children:n.map(i=>e.jsxs("div",{className:"shortcut-item",children:[e.jsxs("div",{className:"shortcut-item-info",children:[e.jsx("span",{className:"shortcut-item-name",children:a(`terminal:controls.shortcuts.${i.id}.name`,{defaultValue:i.name})}),e.jsx("span",{className:"shortcut-item-description",children:a(`terminal:controls.shortcuts.${i.id}.description`,{defaultValue:i.description})})]}),e.jsx(ne,{shortcut:i,onUpdate:y=>_(i.id,y)})]},i.id))})]},t)}),F.length===0&&E.length===0&&e.jsx("div",{className:"shortcuts-empty",children:m?c?e.jsx("p",{children:a("terminal:controls.noShortcutBoundTo",{keys:D({key:c.key,modifiers:c.modifiers})})}):e.jsx("p",{children:a("terminal:controls.pressKeyCombinationToFind")}):e.jsx("p",{children:a("terminal:controls.noShortcutsFound",{query:b})})}),E.length>0&&(p==="all"||p==="global")&&e.jsxs("div",{className:"shortcuts-context-group",children:[p==="all"&&e.jsxs("div",{className:"shortcuts-context-header",children:[e.jsx("span",{className:"shortcuts-context-label",children:"Agent Terminal Shortcuts"}),e.jsx("span",{className:"shortcuts-context-description",children:"Per-agent global shortcuts that open the guake terminal"})]}),e.jsx("div",{className:"shortcuts-grid",children:E.map(t=>e.jsxs("div",{className:"shortcut-item",children:[e.jsxs("div",{className:"shortcut-item-info",children:[e.jsx("span",{className:"shortcut-item-name",children:t.name}),e.jsx("span",{className:"shortcut-item-description",children:"Open terminal for this agent"})]}),e.jsx("div",{className:"key-capture-container",children:e.jsx("button",{className:"key-capture-input disabled",disabled:!0,children:e.jsx("span",{className:"key-capture-value",children:A(t.shortcut)})})})]},t.id))})]})]})]}),x==="mouse"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"shortcuts-modal-toolbar",children:[e.jsx("span",{className:"mouse-controls-subtitle",children:a("terminal:controls.cameraAndInteraction")}),e.jsx("button",{className:"shortcuts-reset-all-btn",onClick:$,children:a("common:buttons.reset")})]}),e.jsxs("div",{className:"shortcuts-modal-content mouse-controls-content",children:[e.jsx("div",{className:"mouse-controls-bindings",children:Object.entries(H).map(([t,n])=>e.jsxs("div",{className:"shortcuts-context-group",children:[e.jsx("div",{className:"shortcuts-context-header",children:e.jsx("span",{className:"shortcuts-context-label",children:a(oe[t])})}),e.jsx("div",{className:"shortcuts-grid",children:n.map(i=>e.jsx(ce,{binding:i},i.id))})]},t))}),e.jsxs("div",{className:"shortcuts-context-group",children:[e.jsxs("div",{className:"shortcuts-context-header",children:[e.jsx("span",{className:"shortcuts-context-label",children:a("terminal:controls.sensitivity")}),e.jsx("span",{className:"shortcuts-context-description",children:a("terminal:controls.adjustCameraSpeed")})]}),e.jsx(ie,{sensitivity:h.sensitivity})]})]})]}),x==="trackpad"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{className:"shortcuts-modal-toolbar",children:[e.jsx("span",{className:"mouse-controls-subtitle",children:a("terminal:controls.trackpadGestureSettings")}),e.jsx("button",{className:"shortcuts-reset-all-btn",onClick:$,children:a("common:buttons.reset")})]}),e.jsx("div",{className:"shortcuts-modal-content trackpad-controls-content",children:e.jsx(de,{config:N})})]}),e.jsx("div",{className:"shortcuts-modal-footer",children:e.jsx("span",{className:"shortcuts-modal-hint",children:a(x==="keyboard"?m?"terminal:controls.hintFindByShortcut":"terminal:controls.hintKeyboard":x==="mouse"?"terminal:controls.hintMouse":"terminal:controls.hintTrackpad")})})]}),e.jsx(re,{isOpen:k!==null,title:a("common:buttons.resetToDefaults"),message:a(q),confirmLabel:a("common:buttons.reset"),cancelLabel:a("common:buttons.cancel"),variant:"danger",onConfirm:I,onClose:()=>w(null)})]})}function ce({binding:s}){const{t:r}=K(["terminal"]),a=W(),[l,o]=u.useState(!1),[h,N]=u.useState(null);u.useEffect(()=>{if(!l)return;const j=d=>{d.preventDefault(),d.stopPropagation();const w={0:"left",1:"middle",2:"right",3:"back",4:"forward"}[d.button];w&&N({button:w,modifiers:{ctrl:d.ctrlKey,alt:d.altKey,shift:d.shiftKey,meta:d.metaKey}})},m=d=>{d.key==="Escape"&&(d.preventDefault(),d.stopPropagation(),o(!1),N(null))},f=()=>{h&&R(a.bindings,h,s.id).length===0&&g.updateMouseBinding(s.id,{button:h.button,modifiers:h.modifiers}),o(!1),N(null)},c=setTimeout(()=>{document.addEventListener("mousedown",j,!0),document.addEventListener("keydown",m,!0),document.addEventListener("click",f,!0)},100);return()=>{clearTimeout(c),document.removeEventListener("mousedown",j,!0),document.removeEventListener("keydown",m,!0),document.removeEventListener("click",f,!0)}},[l,h,s.id,a.bindings]);const x=h?R(a.bindings,h,s.id):[],C=r(`terminal:controls.mouseBindings.${s.id}.name`,{defaultValue:s.name}),b=r(`terminal:controls.mouseBindings.${s.id}.description`,{defaultValue:s.description}),v=j=>r(`terminal:controls.mouseButtons.${j}`,{defaultValue:j}),p=h?V({...s,...h},v):V(s,v);return e.jsxs("div",{className:`shortcut-item ${s.enabled?"":"disabled"}`,children:[e.jsxs("div",{className:"shortcut-item-info",children:[e.jsx("span",{className:"shortcut-item-name",children:C}),e.jsx("span",{className:"shortcut-item-description",children:b})]}),e.jsxs("div",{className:"key-capture-container",children:[e.jsx("button",{className:`key-capture-input ${l?"capturing":""} ${x.length>0?"conflict":""}`,onClick:()=>o(!0),children:l?h?e.jsx("span",{className:"key-capture-value",style:{color:"#f1fa8c"},children:p}):e.jsx("span",{style:{color:"#6272a4",fontStyle:"italic"},children:r("terminal:controls.clickToCapture")}):e.jsx("span",{className:"key-capture-value",children:p})}),x.length>0&&e.jsxs("span",{className:"key-capture-conflict",children:[r("terminal:controls.conflicts"),": ",x.map(j=>r(`terminal:controls.mouseBindings.${j.id}.name`,{defaultValue:j.name})).join(", ")]})]})]})}function ie({sensitivity:s}){const{t:r}=K(["terminal"]),a=u.useCallback((l,o)=>{g.updateCameraSensitivity({[l]:o})},[]);return e.jsxs("div",{className:"sensitivity-inline-settings",children:[e.jsxs("div",{className:"sensitivity-sliders",children:[e.jsxs("div",{className:"sensitivity-slider-row",children:[e.jsx("label",{children:r("terminal:controls.panSpeed")}),e.jsx("input",{type:"range",min:"0.1",max:"3",step:"0.1",value:s.panSpeed,onChange:l=>a("panSpeed",parseFloat(l.target.value))}),e.jsxs("span",{className:"sensitivity-slider-value",children:[s.panSpeed.toFixed(1),"x"]})]}),e.jsxs("div",{className:"sensitivity-slider-row",children:[e.jsx("label",{children:r("terminal:controls.orbitSpeed")}),e.jsx("input",{type:"range",min:"0.1",max:"3",step:"0.1",value:s.orbitSpeed,onChange:l=>a("orbitSpeed",parseFloat(l.target.value))}),e.jsxs("span",{className:"sensitivity-slider-value",children:[s.orbitSpeed.toFixed(1),"x"]})]}),e.jsxs("div",{className:"sensitivity-slider-row",children:[e.jsx("label",{children:r("terminal:controls.zoomSpeed")}),e.jsx("input",{type:"range",min:"0.1",max:"3",step:"0.1",value:s.zoomSpeed,onChange:l=>a("zoomSpeed",parseFloat(l.target.value))}),e.jsxs("span",{className:"sensitivity-slider-value",children:[s.zoomSpeed.toFixed(1),"x"]})]}),e.jsxs("div",{className:"sensitivity-slider-row",children:[e.jsx("label",{children:r("terminal:controls.smoothing")}),e.jsx("input",{type:"range",min:"0",max:"1",step:"0.1",value:s.smoothing,onChange:l=>a("smoothing",parseFloat(l.target.value))}),e.jsx("span",{className:"sensitivity-slider-value",children:s.smoothing.toFixed(1)})]})]}),e.jsxs("div",{className:"sensitivity-checkboxes-inline",children:[e.jsxs("label",{className:"sensitivity-checkbox-inline",children:[e.jsx("input",{type:"checkbox",checked:s.invertPanX,onChange:l=>a("invertPanX",l.target.checked)}),e.jsx("span",{children:r("terminal:controls.invertPanX")})]}),e.jsxs("label",{className:"sensitivity-checkbox-inline",children:[e.jsx("input",{type:"checkbox",checked:s.invertPanY,onChange:l=>a("invertPanY",l.target.checked)}),e.jsx("span",{children:r("terminal:controls.invertPanY")})]}),e.jsxs("label",{className:"sensitivity-checkbox-inline",children:[e.jsx("input",{type:"checkbox",checked:s.invertOrbitX,onChange:l=>a("invertOrbitX",l.target.checked)}),e.jsx("span",{children:r("terminal:controls.invertOrbitX")})]}),e.jsxs("label",{className:"sensitivity-checkbox-inline",children:[e.jsx("input",{type:"checkbox",checked:s.invertOrbitY,onChange:l=>a("invertOrbitY",l.target.checked)}),e.jsx("span",{children:r("terminal:controls.invertOrbitY")})]})]})]})}function de({config:s}){const{t:r}=K(["terminal"]),a=u.useCallback((o,h)=>{g.updateTrackpadConfig({[o]:h})},[]),l=u.useCallback((o,h)=>{g.updateTrackpadConfig({sensitivity:{[o]:h}})},[]);return e.jsxs("div",{className:"trackpad-settings",children:[e.jsxs("div",{className:"shortcuts-context-group",children:[e.jsxs("div",{className:"shortcuts-context-header",children:[e.jsx("span",{className:"shortcuts-context-label",children:r("terminal:controls.trackpadGestures")}),e.jsx("span",{className:"shortcuts-context-description",children:r("terminal:controls.enableTrackpadSupport")})]}),e.jsx("div",{className:"trackpad-toggle-row",children:e.jsxs("label",{className:"trackpad-toggle",children:[e.jsx("input",{type:"checkbox",checked:s.enabled,onChange:o=>a("enabled",o.target.checked)}),e.jsx("span",{className:"trackpad-toggle-label",children:r("terminal:controls.enableTrackpadGestures")})]})})]}),e.jsxs("div",{className:"shortcuts-context-group",children:[e.jsxs("div",{className:"shortcuts-context-header",children:[e.jsx("span",{className:"shortcuts-context-label",children:r("terminal:controls.gestureControls")}),e.jsx("span",{className:"shortcuts-context-description",children:r("terminal:controls.enableDisableGestures")})]}),e.jsxs("div",{className:"trackpad-gestures-grid",children:[e.jsxs("label",{className:`trackpad-gesture-item ${s.enabled?"":"disabled"}`,children:[e.jsx("input",{type:"checkbox",checked:s.pinchToZoom,onChange:o=>a("pinchToZoom",o.target.checked),disabled:!s.enabled}),e.jsxs("div",{className:"trackpad-gesture-info",children:[e.jsx("span",{className:"trackpad-gesture-name",children:r("terminal:controls.pinchToZoom")}),e.jsx("span",{className:"trackpad-gesture-desc",children:r("terminal:controls.pinchToZoomDesc")})]})]}),e.jsxs("label",{className:`trackpad-gesture-item ${s.enabled?"":"disabled"}`,children:[e.jsx("input",{type:"checkbox",checked:s.twoFingerPan,onChange:o=>a("twoFingerPan",o.target.checked),disabled:!s.enabled}),e.jsxs("div",{className:"trackpad-gesture-info",children:[e.jsx("span",{className:"trackpad-gesture-name",children:r("terminal:controls.twoFingerPan")}),e.jsx("span",{className:"trackpad-gesture-desc",children:r("terminal:controls.twoFingerPanDesc")})]})]}),e.jsxs("label",{className:`trackpad-gesture-item ${s.enabled?"":"disabled"}`,children:[e.jsx("input",{type:"checkbox",checked:s.shiftTwoFingerOrbit,onChange:o=>a("shiftTwoFingerOrbit",o.target.checked),disabled:!s.enabled}),e.jsxs("div",{className:"trackpad-gesture-info",children:[e.jsx("span",{className:"trackpad-gesture-name",children:r("terminal:controls.shiftTwoFingerOrbit")}),e.jsx("span",{className:"trackpad-gesture-desc",children:r("terminal:controls.shiftTwoFingerOrbitDesc")})]})]})]})]}),e.jsxs("div",{className:"shortcuts-context-group",children:[e.jsxs("div",{className:"shortcuts-context-header",children:[e.jsx("span",{className:"shortcuts-context-label",children:r("terminal:controls.sensitivity")}),e.jsx("span",{className:"shortcuts-context-description",children:r("terminal:controls.adjustGestureSensitivity")})]}),e.jsxs("div",{className:"trackpad-sensitivity-sliders",children:[e.jsxs("div",{className:`trackpad-slider-row ${!s.enabled||!s.pinchToZoom?"disabled":""}`,children:[e.jsx("label",{children:r("terminal:controls.zoom")}),e.jsx("input",{type:"range",min:"0.1",max:"3",step:"0.1",value:s.sensitivity.zoom,onChange:o=>l("zoom",parseFloat(o.target.value)),disabled:!s.enabled||!s.pinchToZoom}),e.jsxs("span",{className:"trackpad-slider-value",children:[s.sensitivity.zoom.toFixed(1),"x"]})]}),e.jsxs("div",{className:`trackpad-slider-row ${!s.enabled||!s.twoFingerPan?"disabled":""}`,children:[e.jsx("label",{children:r("terminal:controls.pan")}),e.jsx("input",{type:"range",min:"0.1",max:"3",step:"0.1",value:s.sensitivity.pan,onChange:o=>l("pan",parseFloat(o.target.value)),disabled:!s.enabled||!s.twoFingerPan}),e.jsxs("span",{className:"trackpad-slider-value",children:[s.sensitivity.pan.toFixed(1),"x"]})]}),e.jsxs("div",{className:`trackpad-slider-row ${!s.enabled||!s.shiftTwoFingerOrbit?"disabled":""}`,children:[e.jsx("label",{children:r("terminal:controls.orbit")}),e.jsx("input",{type:"range",min:"0.1",max:"3",step:"0.1",value:s.sensitivity.orbit,onChange:o=>l("orbit",parseFloat(o.target.value)),disabled:!s.enabled||!s.shiftTwoFingerOrbit}),e.jsxs("span",{className:"trackpad-slider-value",children:[s.sensitivity.orbit.toFixed(1),"x"]})]})]})]})]})}export{pe as ControlsModal};
@@ -1 +0,0 @@
1
- import{u as as,i as ts,k as ls,l as is,B as os,r as t,m as Ie,S as oe,D as cs,C as ce,A as _e,d as re,c as rs,s as S,g as ds,j as e,M as ps,n as Le,H as x,F as ms,P as de,I as pe,o as T,p as X,O as us,G as Y,q as hs,t as me,v as ws,w as ue,x as xs,y as fs}from"./main-DuaHyH5t.js";import{D as js}from"./common-types-CZVd6J8k.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DYBBrXTx.js";function $e(d,g){const b=g.filter(C=>!d.has(C));return b.length===0?`${g[Math.floor(Math.random()*g.length)]}-${Date.now()%1e3}`:b[Math.floor(Math.random()*b.length)]}function bs({isOpen:d,onClose:g,onSpawnStart:b,onSpawnEnd:C,spawnPosition:Pe,spawnAreaId:v}){const{t:n}=as(["terminal","common"]),F=ts(),p=ls(),he=is(),Q=he.length>0?he:os,[m,N]=t.useState(""),[k,O]=t.useState(()=>Ie(oe.LAST_CWD)),[o,M]=t.useState("scout"),[we,I]=t.useState(!1),[Te,R]=t.useState(!1),[xe,V]=t.useState(!1),[fe,je]=t.useState(""),[y,Z]=t.useState([]),[E,U]=t.useState(null),[Fe,ge]=t.useState(!1),[_,ve]=t.useState(""),[h,Oe]=t.useState(""),[z,Re]=t.useState(!1),[G,Ue]=t.useState("bypass"),[i,L]=t.useState("claude"),[f,A]=t.useState({fullAuto:!0,sandbox:"workspace-write",approvalMode:"on-request",search:!1}),[ee,se]=t.useState(new Set),[ne,Ne]=t.useState("claude-opus-4-8[1m]"),[q,Se]=t.useState("xHigh"),[ae,ze]=t.useState("gpt-5.6-luna"),[te,Ge]=t.useState("minimax/MiniMax-M1-80k"),[W,qe]=t.useState(cs),[le,We]=t.useState(""),[be,Be]=t.useState(""),[D,Ke]=t.useState(""),B=t.useRef(null),Ce=t.useRef(!1),$=t.useCallback(()=>{window.__spawnModalAreaContext=null},[]),w=t.useMemo(()=>F.filter(s=>s.enabled),[F]);t.useEffect(()=>{if(d&&!Ce.current){if(w.length>0){const l=w.filter(r=>js.includes(r.slug)).map(r=>r.id);l.length>0&&se(new Set(l))}const a=Ie(oe.DEFAULT_AGENT_CLASS);if(a==="random"){const r=[...Object.keys(xs),...p.map(u=>u.id)];M(r[Math.floor(Math.random()*r.length)])}else M(a||"scout")}Ce.current=d},[d,w,p]);const ke=t.useMemo(()=>{if(!D.trim())return w;const s=D.toLowerCase();return w.filter(a=>a.name.toLowerCase().includes(s)||a.description.toLowerCase().includes(s)||a.slug.toLowerCase().includes(s))},[w,D]),He=t.useCallback(s=>{se(a=>{const l=new Set(a);return l.has(s)?l.delete(s):l.add(s),l})},[]);t.useMemo(()=>w.filter(s=>s.assignedAgentClasses.includes(o)),[w,o]);const Je=t.useMemo(()=>{var a;const s=p.find(l=>l.id===o);return(a=s==null?void 0:s.defaultSkillIds)!=null&&a.length?F.filter(l=>s.defaultSkillIds.includes(l.id)):[]},[p,o,F]),Me=t.useMemo(()=>{if(!_.trim())return y;const s=_.toLowerCase();return y.filter(a=>a.sessionId.toLowerCase().includes(s)||a.projectPath.toLowerCase().includes(s)||a.firstMessage&&a.firstMessage.toLowerCase().includes(s))},[y,_]),K=t.useMemo(()=>{if(!h.trim())return p;const s=h.toLowerCase();return p.filter(a=>a.name.toLowerCase().includes(s)||a.description.toLowerCase().includes(s)||a.id.toLowerCase().includes(s))},[p,h]),H=t.useMemo(()=>{if(!h.trim())return ce;const s=h.toLowerCase();return ce.filter(a=>{const l=_e[a.id];return a.name.toLowerCase().includes(s)||a.id.toLowerCase().includes(s)||l.description.toLowerCase().includes(s)})},[h]);t.useEffect(()=>{if(!d||!h.trim())return;const s=[...K.map(a=>a.id),...H.map(a=>a.id)];s.length===1&&s[0]!==o&&M(s[0])},[d,h,K,H,o]);const c=t.useMemo(()=>p.find(s=>s.id===o),[p,o]),Xe=t.useMemo(()=>{if(c!=null&&c.model)return c.model},[c]),Ye=t.useMemo(()=>{if(c!=null&&c.customModelPath)return re(`/api/custom-models/${c.id}`)},[c]),Qe=c==null?void 0:c.modelScale,Ve=t.useMemo(()=>c?"scout":o,[o,c]),J=t.useCallback(async s=>{ge(!0);try{const a=s?re(`/api/agents/claude-sessions?cwd=${encodeURIComponent(s)}`):re("/api/agents/claude-sessions"),r=await(await rs(a)).json();Z(r.sessions||[])}catch(a){console.error("Failed to fetch sessions:",a),Z([])}finally{ge(!1)}},[]);t.useEffect(()=>{d?J(k||void 0):(Z([]),U(null),ve(""))},[d,J]),t.useEffect(()=>{if(!d)return;const s=setTimeout(()=>{J(k||void 0),U(null)},300);return()=>clearTimeout(s)},[k,d,J]),t.useEffect(()=>{if(!d||!v)return;const s=S.getState().areas.get(v);if(s!=null&&s.directories&&s.directories.length>0){O(s.directories[0]);return}const a=Array.from(S.getState().agents.values()).filter(j=>{var P;return((P=S.getAreaForAgent(j.id))==null?void 0:P.id)===v&&j.cwd});if(a.length===0)return;const l=new Map;for(const j of a)l.set(j.cwd,(l.get(j.cwd)||0)+1);let r="",u=0;for(const[j,P]of l)P>u&&(r=j,u=P);r&&O(r)},[d,v]),t.useEffect(()=>{if(d){const s=new Set(Array.from(S.getState().agents.values()).map(u=>u.name)),a=$e(s,Q),l=p.find(u=>u.id===o),r=l?`${l.name} ${a}`:a;N(r),B.current&&(B.current.focus(),B.current.select())}},[d,Q]),t.useEffect(()=>{if(!d)return;const s=p.find(a=>a.id===o);if(s){const a=p.find(l=>m.startsWith(l.name+" "));if(a){const l=m.substring(a.name.length+1);N(`${s.name} ${l}`)}else N(`${s.name} ${m}`)}else{const a=p.find(l=>m.startsWith(l.name+" "));if(a){const l=m.substring(a.name.length+1);N(l)}}},[o]),t.useEffect(()=>{o==="boss"&&Ne("claude-opus-4-8[1m]")},[o]);const Ze=()=>{var r;console.log("[SpawnModal] handleSpawn called"),R(!1);const s=E&&((r=y.find(u=>u.sessionId===E))==null?void 0:r.projectPath)||k;if(console.log("[SpawnModal] Effective CWD:",s),console.log("[SpawnModal] Agent name:",m),console.log("[SpawnModal] Agent class:",o),console.log("[SpawnModal] Permission mode:",G),console.log("[SpawnModal] Provider:",i),console.log("[SpawnModal] Use Chrome:",z),console.log("[SpawnModal] Session ID:",E||"none"),!s.trim()){console.error("[SpawnModal] Empty CWD, showing error"),R(!0);return}if(!m.trim()){console.log("[SpawnModal] Empty name, regenerating");const u=new Set(Array.from(S.getState().agents.values()).map(j=>j.name));N($e(u,Q));return}fs(oe.LAST_CWD,s),I(!0),b();const a=Array.from(ee),l=be.trim()||void 0;console.log("[SpawnModal] Calling store.spawnAgent with:",{name:m.trim(),class:o,cwd:s.trim(),sessionId:E||void 0,useChrome:i==="claude"?z:!1,permissionMode:G,provider:i,codexConfig:i==="codex"?f:void 0,codexModel:i==="codex"?ae:void 0,opencodeModel:i==="opencode"?te:void 0,grokModel:i==="grok"?W:void 0,piModel:i==="pi"&&le||void 0,initialSkillIds:a,model:i==="claude"?ne:void 0,customInstructions:l?`${l.length} chars`:void 0,spawnAreaId:v||void 0}),window.__spawnModalAreaContext=v?{areaId:v}:null,S.spawnAgent(m.trim(),o,s.trim(),Pe||void 0,E||void 0,i==="claude"?z:!1,G,a,i,i==="codex"?f:void 0,i==="codex"?ae:void 0,i==="claude"?ne:void 0,l,i==="claude"||i==="grok"||i==="pi"?q:void 0,i==="opencode"?te:void 0,i==="grok"?W:void 0,i==="pi"&&le||void 0)},ye=()=>{console.log("[SpawnModal] Agent creation successful"),I(!1),N(""),se(new Set),$(),C(),g()},Ee=()=>{console.error("[SpawnModal] Agent creation failed"),I(!1),R(!0),$(),C()},Ae=s=>{console.log("[SpawnModal] Directory not found:",s),I(!1),je(s),V(!0),C()},De=()=>{V(!1),I(!0),b(),S.createDirectoryAndSpawn(fe,m.trim(),o)},ie=()=>{V(!1),je(""),$()};t.useEffect(()=>(window.__spawnModalSuccess=ye,window.__spawnModalError=Ee,window.__spawnModalDirNotFound=Ae,()=>{$(),delete window.__spawnModalSuccess,delete window.__spawnModalError,delete window.__spawnModalDirNotFound}),[m,o,ye,Ee,Ae,$]);const{handleMouseDown:es,handleClick:ss}=ds(g),ns=s=>{s.key==="Escape"&&g()};return!d&&!xe?null:xe?e.jsx("div",{className:"modal-overlay visible",onClick:ie,onKeyDown:s=>{s.key==="Escape"&&ie(),s.key==="Enter"&&De()},children:e.jsxs("div",{className:"modal confirm-modal",onClick:s=>s.stopPropagation(),children:[e.jsx("div",{className:"modal-header",children:n("terminal:spawn.directoryNotFound")}),e.jsxs("div",{className:"modal-body confirm-modal-body",children:[e.jsx("p",{children:n("terminal:spawn.directoryNotExist")}),e.jsx("code",{className:"confirm-modal-path",children:fe}),e.jsx("p",{children:n("terminal:spawn.wouldYouCreate")})]}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("button",{className:"btn btn-secondary",onClick:ie,children:n("common:buttons.cancel")}),e.jsx("button",{className:"btn btn-primary",onClick:De,autoFocus:!0,children:n("terminal:spawn.createDirectory")})]})]})}):e.jsx("div",{className:`modal-overlay ${d?"visible":""}`,onMouseDown:es,onClick:ss,onKeyDown:ns,children:e.jsxs("div",{className:"modal spawn-modal",children:[e.jsx("div",{className:"modal-header",children:n("terminal:spawn.deployTitle")}),e.jsxs("div",{className:"modal-body spawn-modal-body",children:[e.jsxs("div",{className:"spawn-section",children:[e.jsxs("div",{className:"spawn-section-header",children:[e.jsx("h4",{className:"spawn-section-title",children:n("terminal:spawn.agentClass")}),e.jsx("span",{className:"spawn-section-hint",children:(c==null?void 0:c.name)||o})]}),e.jsxs("div",{className:"spawn-top-section",children:[e.jsxs("div",{className:"spawn-preview-compact",children:[e.jsx(ps,{agentClass:Ve,modelFile:Xe,customModelUrl:Ye,modelScale:Qe,width:110,height:130}),e.jsx("div",{className:"spawn-preview-label",children:(c==null?void 0:c.name)||o})]}),e.jsxs("div",{className:"spawn-class-section",children:[p.length+ce.length>6&&e.jsx("input",{type:"text",className:"spawn-input class-search-input",placeholder:n("terminal:spawn.filterClasses"),value:h,onChange:s=>Oe(s.target.value)}),e.jsxs("div",{className:"class-selector-inline",children:[K.map(s=>e.jsxs("button",{className:`class-chip ${o===s.id?"selected":""}`,onClick:()=>M(s.id),title:s.description,children:[e.jsx(Le,{classId:s.id,size:18,className:"class-chip-icon"}),e.jsx("span",{className:"class-chip-name",children:s.name})]},s.id)),H.map(s=>{const a=_e[s.id];return e.jsxs("button",{className:`class-chip ${o===s.id?"selected":""}`,onClick:()=>M(s.id),title:a.description,children:[e.jsx(Le,{classId:s.id,size:18,className:"class-chip-icon"}),e.jsx("span",{className:"class-chip-name",children:s.name})]},s.id)}),h&&K.length===0&&H.length===0&&e.jsx("div",{className:"class-search-empty",children:n("terminal:spawn.noClassesMatch",{query:h})})]})]})]}),e.jsxs("div",{className:"spawn-form-row",children:[e.jsxs("div",{className:"spawn-field",children:[e.jsx("label",{className:"spawn-label",children:n("common:labels.name")}),e.jsx("input",{ref:B,type:"text",className:"spawn-input",placeholder:n("terminal:spawn.agentNamePlaceholder"),value:m,onChange:s=>N(s.target.value)})]}),e.jsxs("div",{className:"spawn-field spawn-field-wide",children:[e.jsxs("label",{className:"spawn-label",children:[n("terminal:spawn.workingDir"),e.jsx(x,{text:n("terminal:spawn.helpWorkingDir"),title:n("terminal:spawn.workingDir"),position:"top",size:"sm"})]}),e.jsx(ms,{value:k,onChange:s=>{O(s),R(!1)},placeholder:n("terminal:spawn.workingDirPlaceholder"),className:`spawn-input ${Te?"error":""}`,directoriesOnly:!0})]})]})]}),e.jsxs("div",{className:"spawn-section",children:[e.jsx("div",{className:"spawn-section-header",children:e.jsx("h4",{className:"spawn-section-title",children:n("terminal:spawn.selectRuntime")})}),e.jsxs("div",{className:"spawn-form-row",children:[e.jsxs("div",{className:"spawn-field",children:[e.jsxs("label",{className:"spawn-label",children:[n("common:labels.runtime"),e.jsx(x,{text:n("terminal:spawn.helpRuntime"),title:n("terminal:spawn.runtimeTitle"),position:"top",size:"sm"})]}),e.jsxs("div",{className:"spawn-select-row",children:[e.jsxs("button",{className:`spawn-select-btn ${i==="claude"?"selected":""}`,onClick:()=>L("claude"),title:n("terminal:spawn.useClaudeCli"),children:[e.jsx("img",{src:"/assets/claude.ico",alt:"Claude",className:"spawn-provider-icon"}),e.jsx("span",{children:"Claude"})]}),e.jsxs("button",{className:`spawn-select-btn ${i==="codex"?"selected":""}`,onClick:()=>L("codex"),title:n("terminal:spawn.useCodexCli"),children:[e.jsx("img",{src:"/assets/codex.ico",alt:"Codex",className:"spawn-provider-icon"}),e.jsx("span",{children:"Codex"})]}),e.jsxs("button",{className:`spawn-select-btn spawn-select-btn--opencode ${i==="opencode"?"selected":""}`,onClick:()=>L("opencode"),title:"Use OpenCode CLI (multi-provider)",children:[e.jsx("img",{src:"/assets/opencode.svg",alt:"OpenCode",className:"spawn-provider-icon"}),e.jsx("span",{children:"OpenCode"})]}),e.jsxs("button",{className:`spawn-select-btn spawn-select-btn--grok ${i==="grok"?"selected":""}`,onClick:()=>L("grok"),title:"Use Grok CLI (headless)",children:[e.jsx("img",{src:"/assets/grok.png",alt:"Grok",className:"spawn-provider-icon"}),e.jsx("span",{children:"Grok"})]}),e.jsxs("button",{className:`spawn-select-btn spawn-select-btn--pi ${i==="pi"?"selected":""}`,onClick:()=>L("pi"),title:"Use Pi coding agent CLI (multi-provider)",children:[e.jsx("img",{src:"/assets/pi.svg",alt:"Pi",className:"spawn-provider-icon"}),e.jsx("span",{children:"Pi"})]})]})]}),e.jsxs("div",{className:"spawn-field",children:[e.jsxs("label",{className:"spawn-label",children:[n("common:labels.permissions"),e.jsx(x,{text:n("terminal:spawn.helpPermission"),title:n("terminal:spawn.permissionMode"),position:"top",size:"sm"})]}),e.jsx("div",{className:"spawn-select-row",children:Object.keys(de).map(s=>e.jsxs("button",{className:`spawn-select-btn ${G===s?"selected":""}`,onClick:()=>Ue(s),title:de[s].description,children:[e.jsx("span",{children:e.jsx(pe,{name:s==="bypass"?"bolt":"lock",size:12})}),e.jsx("span",{children:de[s].label})]},s))})]})]}),e.jsx("div",{className:"spawn-form-row",children:e.jsxs("div",{className:"spawn-field",children:[e.jsxs("label",{className:"spawn-label",children:[n("common:labels.model"),e.jsx(x,{text:n("terminal:spawn.helpModel"),title:n("terminal:spawn.modelTitle"),position:"top",size:"sm"})]}),i==="claude"?e.jsx("div",{className:"spawn-select-row spawn-select-row--wrap",children:Object.keys(T).filter(s=>!T[s].deprecated).map(s=>e.jsxs("button",{className:`spawn-select-btn ${ne===s?"selected":""}`,onClick:()=>Ne(s),title:T[s].description,children:[e.jsx("span",{children:T[s].icon}),e.jsx("span",{children:T[s].label})]},s))}):i==="codex"?e.jsx("div",{className:"spawn-select-row spawn-select-row--codex-models",children:Object.keys(X).map(s=>e.jsxs("button",{className:`spawn-select-btn ${ae===s?"selected":""}`,onClick:()=>ze(s),title:X[s].description,children:[e.jsx("span",{children:X[s].icon}),e.jsx("span",{children:X[s].label})]},s))}):i==="opencode"?e.jsx(us,{value:te,onChange:Ge,inputId:"spawn-opencode-model"}):i==="grok"?e.jsx("div",{className:"spawn-select-row spawn-select-row--wrap",children:Object.keys(Y).map(s=>e.jsxs("button",{className:`spawn-select-btn ${W===s?"selected":""}`,onClick:()=>qe(s),title:Y[s].description,children:[e.jsx("span",{children:Y[s].icon}),e.jsx("span",{children:Y[s].label})]},s))}):i==="pi"?e.jsx(hs,{value:le,onChange:We,inputId:"spawn-pi-model"}):e.jsx("div",{className:"spawn-inline-hint",children:n("terminal:spawn.chooseCodexModel")})]})}),e.jsxs("div",{className:"spawn-form-row",children:[(i==="claude"||i==="grok"||i==="pi")&&e.jsxs("div",{className:"spawn-field",children:[e.jsx("label",{className:"spawn-label",children:"Effort"}),e.jsxs("div",{className:"spawn-select-row spawn-select-row--effort",children:[e.jsx("button",{className:`spawn-select-btn spawn-select-btn--compact ${q===void 0?"selected":""}`,onClick:()=>Se(void 0),title:"Use default effort level",children:e.jsx("span",{children:"Default"})}),Object.keys(me).filter(s=>i!=="grok"||ws(W,s)||q===s).map(s=>e.jsx("button",{className:`spawn-select-btn spawn-select-btn--compact ${q===s?"selected":""}`,onClick:()=>Se(s),title:me[s].description,children:e.jsx("span",{children:me[s].label})},s))]})]}),e.jsxs("div",{className:"spawn-field",children:[e.jsx("label",{className:"spawn-label",children:n("terminal:spawn.browser")}),e.jsxs("label",{className:"spawn-checkbox",children:[e.jsx("input",{type:"checkbox",checked:z,onChange:s=>Re(s.target.checked),disabled:i!=="claude"}),e.jsxs("span",{children:[e.jsx(pe,{name:"globe",size:12})," ",n("terminal:spawn.chromeBrowser")]}),e.jsx(x,{text:n(i==="claude"?"terminal:spawn.helpChrome":"terminal:spawn.helpChromeDisabled"),title:n("terminal:spawn.chromeBrowser"),position:"top",size:"sm"})]})]})]}),i==="codex"&&e.jsxs("div",{className:"codex-config-section",children:[e.jsx("div",{className:"codex-config-title",children:n("terminal:spawn.codex.configuration")}),e.jsxs("div",{className:"codex-config-options",children:[e.jsxs("div",{className:"codex-option-group",children:[e.jsxs("label",{className:"spawn-checkbox",children:[e.jsx("input",{type:"checkbox",checked:f.fullAuto!==!1,onChange:s=>A(a=>({...a,fullAuto:s.target.checked}))}),e.jsx("span",{children:n("terminal:spawn.codex.fullAuto")}),e.jsx(x,{text:n("terminal:spawn.helpFullAuto"),title:n("terminal:spawn.fullAutoTitle"),position:"top",size:"sm"})]}),e.jsxs("label",{className:"spawn-checkbox",children:[e.jsx("input",{type:"checkbox",checked:!!f.search,onChange:s=>A(a=>({...a,search:s.target.checked}))}),e.jsx("span",{children:n("terminal:spawn.codex.search")}),e.jsx(x,{text:n("terminal:spawn.helpSearch"),title:n("terminal:spawn.searchTitle"),position:"top",size:"sm"})]})]}),f.fullAuto===!1&&e.jsxs("div",{className:"codex-option-group",children:[e.jsx("div",{className:"codex-option-header",children:n("terminal:spawn.codex.restrictions")}),e.jsxs("select",{className:"spawn-input codex-select",value:f.sandbox||"workspace-write",onChange:s=>A(a=>({...a,sandbox:s.target.value})),children:[e.jsxs("option",{value:"read-only",children:["📖 ",n("terminal:spawn.codex.sandboxReadOnly")]}),e.jsxs("option",{value:"workspace-write",children:["✏️ ",n("terminal:spawn.codex.sandboxWorkspaceWrite")]}),e.jsxs("option",{value:"danger-full-access",children:["⚡ ",n("terminal:spawn.codex.sandboxDangerFullAccess")]})]}),e.jsxs("select",{className:"spawn-input codex-select",value:f.approvalMode||"on-request",onChange:s=>A(a=>({...a,approvalMode:s.target.value})),children:[e.jsxs("option",{value:"untrusted",children:["🔒 ",n("terminal:spawn.codex.approvalsUntrusted")]}),e.jsxs("option",{value:"on-failure",children:["⚠️ ",n("terminal:spawn.codex.approvalsOnFailure")]}),e.jsxs("option",{value:"on-request",children:["🤔 ",n("terminal:spawn.codex.approvalsOnRequest")]}),e.jsxs("option",{value:"never",children:["✅ ",n("terminal:spawn.codex.approvalsNever")]})]})]}),e.jsxs("div",{className:"codex-option-group",children:[e.jsx("div",{className:"codex-option-header",children:n("terminal:spawn.codex.profile")}),e.jsx("input",{type:"text",className:"spawn-input codex-profile-input",placeholder:n("terminal:spawn.codex.profilePlaceholder"),value:f.profile||"",onChange:s=>A(a=>({...a,profile:s.target.value||void 0}))})]}),e.jsxs("div",{className:"codex-option-group",children:[e.jsx("div",{className:"codex-option-header",children:n("terminal:spawn.codex.reasoningEffort")}),e.jsxs("select",{className:"spawn-input codex-select",value:f.reasoningEffort||"",onChange:s=>A(a=>({...a,reasoningEffort:s.target.value||void 0})),children:[e.jsx("option",{value:"",children:n("terminal:spawn.codex.reasoningEffortDefault")}),Object.keys(ue).map(s=>e.jsxs("option",{value:s,children:[ue[s].icon," ",ue[s].label]},s))]})]})]})]})]}),w.length>0&&e.jsxs("div",{className:"spawn-section spawn-skills-section",children:[e.jsxs("div",{className:"spawn-section-header",children:[e.jsxs("h4",{className:"spawn-section-title",children:[n("terminal:spawn.skills"),e.jsx(x,{text:n("terminal:spawn.helpSkills"),title:n("terminal:spawn.skillsTitle"),position:"top",size:"sm"})]}),e.jsxs("span",{className:"spawn-section-hint",children:[ee.size," selected · ",n("common:labels.optional")]})]}),w.length>6&&e.jsx("input",{type:"text",className:"spawn-input skill-search-input",placeholder:n("terminal:spawn.filterSkills"),value:D,onChange:s=>Ke(s.target.value)}),e.jsxs("div",{className:"spawn-skills-inline",children:[ke.map(s=>{const a=ee.has(s.id);return Je.some(r=>r.id===s.id)?null:e.jsxs("button",{className:`spawn-skill-chip ${a?"selected":""}`,onClick:()=>He(s.id),title:s.description,children:[a&&e.jsx("span",{className:"spawn-skill-check",children:e.jsx(pe,{name:"check",size:10})}),e.jsx("span",{children:s.name}),s.builtin&&e.jsx("span",{className:"spawn-skill-builtin",children:"TC"})]},s.id)}),D&&ke.length===0&&e.jsx("div",{className:"skill-search-empty",children:n("terminal:spawn.noSkillsMatch",{query:D})})]})]}),e.jsxs("details",{className:"spawn-advanced",children:[e.jsxs("summary",{children:[n("terminal:spawn.customInstructions")," & ",n("terminal:spawn.linkSession")]}),e.jsxs("div",{className:"spawn-advanced-body",children:[e.jsxs("div",{className:"spawn-custom-instructions-section",children:[e.jsxs("label",{className:"spawn-label",children:[n("terminal:spawn.customInstructions")," ",e.jsxs("span",{className:"spawn-label-hint",children:["(",n("common:labels.optional"),")"]}),e.jsx(x,{text:n("terminal:spawn.helpCustomInstructions"),title:n("terminal:spawn.customInstructions"),position:"top",size:"sm"})]}),e.jsx("textarea",{className:"spawn-input spawn-textarea",placeholder:n("terminal:spawn.customInstructionsPlaceholder"),value:be,onChange:s=>Be(s.target.value),rows:3})]}),e.jsxs("div",{className:"spawn-sessions-section",children:[e.jsxs("label",{className:"spawn-label",children:[n("terminal:spawn.linkSession")," ",e.jsxs("span",{className:"spawn-label-hint",children:["(",n("common:labels.optional"),")"]}),e.jsx(x,{text:n("terminal:spawn.helpLinkSession"),title:n("terminal:spawn.linkSessionTitle"),position:"top",size:"sm"})]}),y.length>0&&e.jsx("input",{type:"text",className:"spawn-input session-search-input",placeholder:n("terminal:spawn.searchSessions"),value:_,onChange:s=>ve(s.target.value)}),e.jsx("div",{className:"sessions-list",children:Fe?e.jsx("div",{className:"sessions-loading",children:n("terminal:spawn.loadingSessions")}):y.length===0?e.jsx("div",{className:"sessions-empty",children:n("terminal:spawn.noSessions")}):Me.length===0?e.jsx("div",{className:"sessions-empty",children:n("terminal:spawn.noSessionsMatch",{query:_})}):Me.map(s=>{const a=E===s.sessionId,l=Date.now()-new Date(s.lastModified).getTime(),r=l<6e4?n("common:time.justNow"):l<36e5?n("common:time.minutesAgo",{count:Math.floor(l/6e4)}):l<864e5?n("common:time.hoursAgo",{count:Math.floor(l/36e5)}):n("common:time.daysAgo",{count:Math.floor(l/864e5)});return e.jsxs("div",{className:`session-item ${a?"selected":""}`,onClick:()=>{a?U(null):(U(s.sessionId),O(s.projectPath))},children:[e.jsxs("div",{className:"session-item-header",children:[e.jsx("span",{className:"session-item-path",children:s.projectPath}),e.jsx("span",{className:"session-item-age",children:r})]}),e.jsx("div",{className:"session-item-preview",children:s.firstMessage||n("terminal:spawn.messagesCount",{count:s.messageCount})})]},s.sessionId)})})]})]})]})]}),e.jsxs("div",{className:"modal-footer",children:[e.jsx("button",{className:"btn btn-secondary",onClick:g,children:n("common:buttons.cancel")}),e.jsx("button",{className:"btn btn-primary",onClick:Ze,disabled:we,children:n(we?"common:buttons.deploying":"common:buttons2.deploy")})]})]})})}export{bs as SpawnModal};
@@ -1 +0,0 @@
1
- import{U as a,C as n}from"./mermaid.core-CGrC54u1.js";const t=(r,o)=>a.lang.round(n.parse(r)[o]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-V7JOEXUC-CGdZK5My.js";import{_ as i}from"./mermaid.core-CGrC54u1.js";import"./chunk-5VM5RSS4-dTYGN5E5.js";import"./chunk-XXDRQBXY-B2n8y5qo.js";import"./chunk-VR4S4FIN-C-HH5QTv.js";import"./chunk-32BRIVSS-CPbVoclL.js";import"./main-DuaHyH5t.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DYBBrXTx.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-V7JOEXUC-CGdZK5My.js";import{_ as i}from"./mermaid.core-CGrC54u1.js";import"./chunk-5VM5RSS4-dTYGN5E5.js";import"./chunk-XXDRQBXY-B2n8y5qo.js";import"./chunk-VR4S4FIN-C-HH5QTv.js";import"./chunk-32BRIVSS-CPbVoclL.js";import"./main-DuaHyH5t.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DYBBrXTx.js";var b={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{b as diagram};
@@ -1,2 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/web-DAWG2rda.js","assets/main-DuaHyH5t.js","assets/vendor-react--Eh9ivFN.js","assets/vendor-three-DYBBrXTx.js","assets/main-BdVckSM5.css"])))=>i.map(i=>d[i]);
2
- import{a9 as e,a1 as a}from"./main-DuaHyH5t.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DYBBrXTx.js";var i;(function(r){r.Heavy="HEAVY",r.Medium="MEDIUM",r.Light="LIGHT"})(i||(i={}));var t;(function(r){r.Success="SUCCESS",r.Warning="WARNING",r.Error="ERROR"})(t||(t={}));const E=e("Haptics",{web:()=>a(()=>import("./web-DAWG2rda.js"),__vite__mapDeps([0,1,2,3,4])).then(r=>new r.HapticsWeb)});export{E as Haptics,i as ImpactStyle,t as NotificationType};
@@ -1,2 +0,0 @@
1
- import{r as n,aW as $a,aX as oa,N as ba,aY as _a,j as e,aZ as wa,a_ as Da,u as sa,a$ as za,b0 as Ra,b1 as Oa,b2 as Fa,b3 as Ba,aj as Wa,b4 as Ha,b5 as Ua,aC as va,m as Vt,S as E,y as qt,b6 as ta,b7 as ca,b8 as Lt,b9 as xe,ba as Ga,s as g,K as ja,a0 as Ca,f as ka,bb as Xa,bc as da,bd as ua,I as d,be as Va,bf as aa,aF as Na,bg as qa,n as ya,ad as Aa,bh as Sa,bi as Ya,bj as Ka,bk as Za,ai as Ja,bl as Qa,bm as en,bn as tn,aI as an,aJ as nn,aK as sn,bo as ln,bp as rn,bq as na,Z as on,U as cn,br as dn,bs as un,bt as mn,bu as pn,bv as fn,bw as hn,bx as gn,by as xn,bz as Yt,bA as ma,bB as bn,bC as _n,bD as wn,z as vn,bE as jn,bF as Cn,bG as kn,bH as Nn,bI as ct,bJ as yn,bK as An,bL as Sn,bM as En,bN as wt,bO as In,bP as Mn,bQ as Tn,bR as Ln,p as Pn,D as $n,t as Kt,o as Dn}from"./main-DuaHyH5t.js";import{g as zn}from"./area-logos-ml30JJUi.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-DYBBrXTx.js";function Rn(c){const o=n.useRef(c);o.current=c,n.useEffect(()=>{if(!$a())return;let m=null,b=!1;return oa.addListener("backButton",()=>{o.current()==="exit"&&oa.exitApp()}).then(y=>{b?y.remove():m=y}),()=>{b=!0,m&&(m.remove(),m=null)}},[])}async function On(c){const o=ba(),m=await fetch(`${_a()}/api/agents/${c}/terminal`,{method:"POST",headers:{Authorization:`Bearer ${o}`}});if(!m.ok){const b=await m.json().catch(()=>({}));throw new Error((b==null?void 0:b.error)||`Failed to start terminal (${m.status})`)}return m.json()}async function Fn(c){const o=ba();await fetch(`${_a()}/api/agents/${c}/terminal`,{method:"DELETE",headers:{Authorization:`Bearer ${o}`}})}const vt=new Map;function Bn({agentId:c}){const[o,m]=n.useState(null),[b,y]=n.useState(null);return n.useEffect(()=>{let M=!1;const A=vt.get(c);return A&&(clearTimeout(A),vt.delete(c)),m(null),y(null),On(c).then(k=>{M||m(k.url)}).catch(k=>{M||y(k instanceof Error?k.message:"Failed to start terminal")}),()=>{M=!0;const k=vt.get(c);k&&clearTimeout(k),vt.set(c,setTimeout(()=>{vt.delete(c),Fn(c)},2500))}},[c]),b?e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:b})}):o?e.jsx("div",{className:"flat-classic-terminal",children:e.jsx(wa,{terminalUrl:o,visible:!0})}):e.jsx("div",{className:"flat-classic-terminal flat-classic-terminal--message",children:e.jsx("span",{children:"Attaching to interactive session…"})})}const Zt=new Map,Wn=6e4;function pa(c){return Number.isFinite(c)?Math.abs(c)>=1e3?c.toLocaleString(void 0,{maximumFractionDigits:0}):c.toLocaleString(void 0,{maximumFractionDigits:2}):String(c)}function Hn(c,o){var y,M,A;const m=[];if(!c.rateLimits)return m;if(c.provider==="claude"){const k=c,K=[{key:"fiveHour",label:o("terminal:usage.currentSession"),window:k.rateLimits.fiveHour},{key:"sevenDay",label:o("terminal:usage.currentWeekAll"),window:k.rateLimits.sevenDay},{key:"sevenDayOpus",label:o("terminal:usage.currentWeekOpus"),window:k.rateLimits.sevenDayOpus},{key:"sevenDayFable",label:o("terminal:usage.currentWeekFable"),window:k.rateLimits.sevenDayFable}];for(const j of K)(j.window||j.key==="sevenDayFable")&&m.push(j);return m}const b=c;return(y=b.rateLimits)!=null&&y.weekly&&m.push({key:"weekly",label:o("terminal:usage.weeklyLimit"),window:b.rateLimits.weekly}),(M=b.rateLimits)!=null&&M.monthly&&m.push({key:"monthly",label:o("terminal:usage.monthlyLimit"),window:b.rateLimits.monthly}),(A=b.rateLimits)!=null&&A.onDemand&&m.push({key:"onDemand",label:o("terminal:usage.onDemandLimit"),window:b.rateLimits.onDemand}),m}function Un({agentId:c,contextSummary:o}){const{t:m}=sa(["terminal","common"]),[b,y]=n.useState(()=>{var R;return((R=Zt.get(c))==null?void 0:R.snapshot)??null}),[M,A]=n.useState(!1),[k,K]=n.useState(null),j=n.useRef(0);n.useEffect(()=>{const R=Zt.get(c);if(R&&Date.now()-R.fetchedAt<Wn){y(R.snapshot);return}const be=++j.current;A(!0),K(null),za(c).then(L=>{be===j.current&&(Zt.set(c,{snapshot:L,fetchedAt:Date.now()}),y(L),A(!1))}).catch(L=>{be===j.current&&(K(L.message||"Failed to load plan limits"),A(!1))})},[c]);const v=b?Hn(b,m):[];return e.jsxs("div",{className:"plan-limits-tooltip",children:[o&&e.jsx("div",{className:"plan-limits-tooltip__context",children:o}),e.jsx("div",{className:"plan-limits-tooltip__title",children:m("terminal:usage.limits")}),M&&!b&&e.jsxs("div",{className:"plan-limits-tooltip__muted",children:[m("common:status.loading"),"…"]}),!M&&k&&!b&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:m("terminal:usage.limitsError",{message:k})}),v.length>0?e.jsx("div",{className:"plan-limits-tooltip__gauges",children:v.map(({key:R,label:be,window:L})=>{const _e=L?Math.max(0,Math.min(100,L.utilization)):0,te=Oa(_e),ue=L!=null&&typeof L.used=="number"&&typeof L.limit=="number"&&Number.isFinite(L.used)&&Number.isFinite(L.limit);return e.jsxs("div",{className:"plan-limits-tooltip__gauge",children:[e.jsxs("div",{className:"plan-limits-tooltip__gauge-head",children:[e.jsx("span",{className:"plan-limits-tooltip__gauge-label",children:be}),e.jsx("span",{className:"plan-limits-tooltip__gauge-percent",style:{color:te},children:m("terminal:usage.percentUsed",{percent:Math.round(_e)})})]}),e.jsx("div",{className:"plan-limits-tooltip__bar",children:e.jsx("div",{className:"plan-limits-tooltip__bar-fill",style:{width:`${_e}%`,background:te}})}),e.jsxs("div",{className:"plan-limits-tooltip__reset",children:[L&&m("terminal:usage.resets",{time:Ra(L.resetsAt)}),ue&&e.jsx("span",{style:{marginLeft:8},children:m("terminal:usage.creditsUsed",{used:pa(L.used),limit:pa(L.limit)})})]})]},R)})}):b&&!M&&e.jsx("div",{className:"plan-limits-tooltip__muted",children:b.rateLimitsError?m("terminal:usage.limitsError",{message:b.rateLimitsError}):b.cliHint})]})}function Gn({agentId:c,disabled:o,contextSummary:m,children:b}){return e.jsx(Da,{position:"top",maxWidth:320,disabled:o,className:"plan-limits-tooltip-wrapper",triggerStyle:{display:"inline-flex",alignItems:"center"},content:e.jsx(Un,{agentId:c,contextSummary:m}),children:b})}const Xn=n.memo(function({className:o=""}){const{t:m}=sa(["common"]),[b,y]=Fa(),M=n.useRef(null),[A,k]=n.useState(null);n.useLayoutEffect(()=>{const j=M.current;if(!j)return;const v=j.querySelector(".view-mode-toggle__btn--active");v&&k({left:v.offsetLeft,width:v.offsetWidth})},[b]);const K=n.useCallback(j=>{if(j!==b){if(typeof window<"u"&&window.dispatchEvent(new CustomEvent("tide:viewmode-switch-pressed",{detail:{mode:j}})),j==="3d"){requestAnimationFrame(()=>y(j));return}y(j)}},[b,y]);return e.jsxs("div",{className:`view-mode-toggle ${o}`,ref:M,children:[A&&e.jsx("div",{className:"view-mode-toggle__indicator",style:{left:A.left,width:A.width}}),Ba.map(j=>e.jsxs("button",{className:`view-mode-toggle__btn ${b===j?"view-mode-toggle__btn--active":""}`,onClick:()=>K(j),title:m(`common:viewMode.descriptions.${j}`),children:[e.jsxs("span",{className:"view-mode-toggle__icon",children:[j==="2d"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"18",height:"18",rx:"2"}),e.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12"}),e.jsx("line",{x1:"12",y1:"3",x2:"12",y2:"21"})]}),j==="3d"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("path",{d:"M12 2L2 7l10 5 10-5-10-5z"}),e.jsx("path",{d:"M2 17l10 5 10-5"}),e.jsx("path",{d:"M2 12l10 5 10-5"})]}),j==="flat"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"13",y:"3",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"3",y:"13",width:"8",height:"8",rx:"1"}),e.jsx("rect",{x:"13",y:"13",width:"8",height:"8",rx:"1"})]}),j==="dashboard"&&e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",children:[e.jsx("rect",{x:"3",y:"3",width:"7",height:"9",rx:"1"}),e.jsx("rect",{x:"14",y:"3",width:"7",height:"5",rx:"1"}),e.jsx("rect",{x:"14",y:"12",width:"7",height:"9",rx:"1"}),e.jsx("rect",{x:"3",y:"16",width:"7",height:"5",rx:"1"})]})]}),e.jsx("span",{className:"view-mode-toggle__label",children:m(`common:viewMode.labels.${j}`)})]},j))]})}),Pt=3,$t=280,fa=320,Jt=240,ha=64,Vn=["simple","chat","advanced"],ga={simple:"Simple",chat:"Chat",advanced:"Advanced"},xa={simple:"○",chat:"◐",advanced:"◉"},qn={simple:"Simple view — clean messages only",chat:"Chat view — assistant replies (no tool calls)",advanced:"Advanced view — everything including tools"},Qt="flat-clear-context",Ea="tide:flat-embedded-panels";function Ia(){try{const c=localStorage.getItem(Ea),o=c?JSON.parse(c):{};return o&&typeof o=="object"?o:{}}catch{return{}}}function ea(c,o){try{const m=Ia();o?m[c]=o:delete m[c],localStorage.setItem(Ea,JSON.stringify(m))}catch{}}function Yn(c){const o=c.split("/").filter(Boolean);return o.length===0?c:o.slice(-2).join("/")}function Kn(c){if(c.provider==="codex"){const M=c.codexModel||"gpt-5.6-luna",A=Pn[M];return{model:(A==null?void 0:A.label)||M}}if(c.provider==="opencode")return{model:c.opencodeModel||"opencode"};if(c.provider==="grok"){const M=c.grokModel||$n,A=c.effort,k=A?Kt[A]:void 0;return{model:M,effort:k==null?void 0:k.label}}if(c.provider==="pi"){const M=c.piModel||"pi default",A=c.effort,k=A?Kt[A]:void 0;return{model:M,effort:k==null?void 0:k.label}}const o=c.model||c.detectedModel||"default",m=Dn[o],b=c.effort,y=b?Kt[b]:void 0;return{model:(m==null?void 0:m.label)||o,effort:y==null?void 0:y.label}}function Zn(c,o){if(o.type==="rectangle"&&o.width&&o.height){const m=o.width/2,b=o.height/2;return c.x>=o.center.x-m&&c.x<=o.center.x+m&&c.z>=o.center.z-b&&c.z<=o.center.z+b}if(o.type==="circle"&&o.radius){const m=c.x-o.center.x,b=c.z-o.center.z;return m*m+b*b<=o.radius*o.radius}return!1}const Jn=cn.memo(function({agentId:o,terminalViewMode:m,onTerminalViewModeChange:b,inspectorOpen:y,onToggleInspector:M,onShowTaskBoard:A,onImageClick:k,onFileClick:K,onBashClick:j,onViewMarkdown:v,onRequestClearSubordinates:R,keyboard:be,canNavigateBack:L,canNavigateForward:_e,onNavigateBack:te,onNavigateForward:ue,agentInfoOpen:Ze,onToggleAgentInfo:jt,onHeaderContextMenu:dt,onBuildingContextMenu:$e}){var Z,It;const p=ja(o),O=ka(),we=dn(),ve=n.useRef(null),me=n.useRef(null);un(!0,o);const Je=o,Qe=p,je=!!we.interactiveMode&&((p==null?void 0:p.provider)??"claude")==="claude"&&!!(p!=null&&p.sessionId),[ae,et]=n.useState(!1),[tt,Ue]=n.useState(null),Dt=n.useMemo(()=>{const a=Vn.map(l=>{const i=!ae&&m===l;return{id:`view-mode-${l}`,label:ga[l],icon:e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon",children:xa[l]}),shortcut:i?"✓":void 0,onClick:()=>{et(!1),b(l),Ue(null)}}});return je&&a.push({id:"view-mode-classic-tui",label:"Classic TUI",icon:e.jsx(d,{name:"terminal",size:13}),shortcut:ae?"✓":void 0,onClick:()=>{et(l=>!l),Ue(null)}}),a},[je,ae,m,b]),[Ge,pe]=n.useState(!1),D=n.useCallback(()=>pe(!1),[]);va("flat-chat-actions",Ge,D),n.useEffect(()=>{const a=()=>pe(l=>!l);return window.addEventListener("tide:toggle-chat-actions",a),()=>window.removeEventListener("tide:toggle-chat-actions",a)},[]),n.useEffect(()=>{et(!1),pe(!1)},[o]),n.useEffect(()=>{!je&&ae&&et(!1)},[je,ae]),n.useEffect(()=>{const a=me.current;if(!a)return;const l=u=>{u.button===3?(u.preventDefault(),u.stopPropagation(),te()):u.button===4&&(u.preventDefault(),u.stopPropagation(),ue())},i=u=>{(u.button===3||u.button===4)&&u.preventDefault()};return a.addEventListener("mouseup",l),a.addEventListener("mousedown",i),()=>{a.removeEventListener("mouseup",l),a.removeEventListener("mousedown",i)}},[te,ue]),n.useEffect(()=>{const a=me.current;if(!a)return;let l=0,i=0,u=0;const $=250,V=600,S=80,Le=1.5,ot=U=>{let t=U instanceof HTMLElement?U:null;for(;t&&t!==a;){const s=window.getComputedStyle(t).overflowX;if((s==="auto"||s==="scroll")&&t.scrollWidth>t.clientWidth)return!0;t=t.parentElement}return!1},z=U=>{const t=Date.now();if(t<u){U.preventDefault();return}if(Math.abs(U.deltaX)<=Math.abs(U.deltaY)*Le){l=0;return}if(ot(U.target)){l=0;return}t-i>$&&(l=0),i=t,l+=U.deltaX,l<=-S?(l=0,u=t+V,U.preventDefault(),te()):l>=S&&(l=0,u=t+V,U.preventDefault(),ue())};return a.addEventListener("wheel",z,{passive:!1}),()=>a.removeEventListener("wheel",z)},[te,ue]);const ne=Ca(),ut=n.useMemo(()=>{if(!p)return null;const a=new Set,l=[];for(const i of ne.values())i.archived||i.directories.length===0||i.assignedAgentIds.includes(o)&&(a.add(i.id),l.push(i));for(const i of ne.values())i.archived||i.directories.length===0||a.has(i.id)||Zn({x:p.position.x,z:p.position.z},i)&&(a.add(i.id),l.push(i));return l.length===0?null:l.flatMap(i=>i.directories.filter(u=>u&&u.trim().length>0).map(u=>({areaId:i.id,areaName:i.name,dir:u})))},[p,o,ne]),{branches:Ct,fetchRemote:Xe,fetchingDirs:De}=mn(ut),[Ce,at]=n.useState({}),[fe,Ve]=n.useState(null),Q=n.useMemo(()=>{var $,V;const a=g.getAreaForAgent(o);if(!a)return[];const l=[],i=($=a.directories.find(S=>S&&S.trim().length>0))==null?void 0:$.trim(),u=i?i.split("/").filter(Boolean).pop()||i:a.name;l.push({id:pn(a.id),name:u,hasUrl:!!Ce[a.id],isDefault:!0});for(const S of O.values())S.type==="terminal"&&g.isPositionInArea(S.position,a)&&l.push({id:S.id,name:S.name,hasUrl:!!((V=S.terminalStatus)!=null&&V.url)});return l},[o,O,ne,Ce]),se=n.useMemo(()=>{var i;const a=g.getAreaForAgent(o);if(!a)return[];const l=[];for(const u of O.values())u.type==="server"&&((i=u.pm2)!=null&&i.enabled)&&g.isPositionInArea(u.position,a)&&l.push({id:u.id,name:u.name});return l},[o,O]),nt=n.useMemo(()=>{const a=g.getAreaForAgent(o);if(!a)return[];const l=[];for(const i of O.values())i.type==="database"&&i.database&&g.isPositionInArea(i.position,a)&&l.push({id:i.id,name:i.name});return l},[o,O]),kt=fn(),qe=n.useMemo(()=>{const a=g.getAreaForAgent(o);if(!a)return[];const l=[];for(const i of O.values())if(i.type==="tests"&&g.isPositionInArea(i.position,a)){const u=!!i.folderPath&&kt.some($=>hn($,i.folderPath));l.push({id:i.id,name:i.name,working:u})}return l},[o,O,kt]),ke=n.useMemo(()=>{const a=g.getAreaForAgent(o);if(!a)return[];const l=[];for(const i of O.values())i.type==="http"&&g.isPositionInArea(i.position,a)&&l.push({id:i.id,name:i.name});return l},[o,O]),[,zt]=n.useReducer(a=>a+1,0),Ne=((Z=ve.current)==null?void 0:Z.search.searchMode)??!1,ye=n.useCallback(()=>{var a;(a=ve.current)==null||a.search.toggleSearch(),zt()},[]),mt=gn(),ie=mt.isPending(Qt),[_,he]=n.useState(null),F=_?O.get(_.buildingId):null,[Nt,ze]=n.useState(""),[pt,Rt]=n.useState(()=>xn()),B=n.useMemo(()=>{var a;return((a=g.getAreaForAgent(o))==null?void 0:a.id)??null},[o,O]),Re=n.useCallback((a,l)=>{ze(""),he(i=>{const u=(i==null?void 0:i.buildingId)===l?null:{type:a,buildingId:l};return B&&ea(B,u),u})},[B]),ee=n.useCallback(()=>{ze(""),he(null),B&&ea(B,null)},[B]);n.useEffect(()=>{if((_==null?void 0:_.type)!=="pm2-logs")return;const a=_.buildingId;return g.startLogStreaming(a,200),()=>g.stopLogStreaming(a)},[_]),n.useEffect(()=>{if(Ve(null),(_==null?void 0:_.type)!=="terminal"||!Yt(_.buildingId))return;const a=ma(_.buildingId);let l=!1;return bn(a).then(i=>{l||at(u=>u[a]===i.url?u:{...u,[a]:i.url})}).catch(i=>{l||Ve(i instanceof Error?i.message:"Failed to start terminal")}),()=>{l=!0}},[_]);const{height:Ot,onResizeStart:Ft}=_n(),{sidePanelWidth:Ae,handleSidePanelResizeStart:le}=wn(),[re,ft]=n.useState(()=>ta(E.GIT_PANEL_OPEN,!1)),[Oe,yt]=n.useState(()=>ta(E.BUILDINGS_PANEL_OPEN,!1)),[Fe,At]=n.useState(!1),st=n.useCallback(()=>{At(a=>!a)},[]),Ye=n.useCallback(()=>At(!1),[]),it=n.useCallback(()=>{ft(a=>{const l=!a;return xe(E.GIT_PANEL_OPEN,l),l})},[]),Se=n.useCallback(()=>{yt(a=>{const l=!a;return xe(E.BUILDINGS_PANEL_OPEN,l),l})},[]),Bt=n.useCallback(()=>{ft(!1),xe(E.GIT_PANEL_OPEN,!1)},[]),oe=n.useCallback(()=>{yt(!1),xe(E.BUILDINGS_PANEL_OPEN,!1)},[]),Be=vn(),We=n.useMemo(()=>({terminal:Q,"pm2-logs":se,database:nt,tests:qe,http:ke}),[Q,se,nt,qe,ke]);n.useEffect(()=>{if(!_)return;We[_.type].some(l=>l.id===_.buildingId)||(ze(""),he(null))},[_,We]);const St=n.useRef(void 0);n.useEffect(()=>{var l;if(St.current===B)return;St.current=B;const a=B?Ia()[B]:void 0;ze(""),a&&((l=We[a.type])!=null&&l.some(i=>i.id===a.buildingId))?he(a):he(null)},[B,We]),n.useEffect(()=>{const a=l=>{var $;const i=l.detail;if(!(i!=null&&i.buildingId)||!(i!=null&&i.type)||!(($=We[i.type])!=null&&$.some(V=>V.id===i.buildingId)))return;i.handled=!0,ze("");const u={type:i.type,buildingId:i.buildingId};he(u),B&&ea(B,u)};return window.addEventListener("tide:dock-building-flat",a),()=>window.removeEventListener("tide:dock-building-flat",a)},[We,B]);const[Ee,Ie]=n.useState(!1),ht=n.useRef(null);if(n.useEffect(()=>{if(!Ee)return;const a=l=>{ht.current&&!ht.current.contains(l.target)&&Ie(!1)};return document.addEventListener("mousedown",a),()=>document.removeEventListener("mousedown",a)},[Ee]),!p)return e.jsx("div",{className:"flat-chat flat-chat--empty",children:e.jsxs("div",{className:"flat-chat__placeholder",children:[e.jsx("span",{className:"flat-chat__placeholder-icon",children:"💬"}),e.jsx("span",{className:"flat-chat__placeholder-text",children:"Select an agent to start chatting"})]})});const gt=!!p.contextStats,{totalTokens:Wt,contextWindow:ge,usedPercent:ce}=Na(p),xt=Math.round(ce*10)/10,Ht=Math.round((100-ce)*10)/10,bt=ce>=80?"#ff4a4a":ce>=60?"#ff9e4a":ce>=40?"#ffd700":"#4aff9e",He=(Wt/1e3).toFixed(1),lt=(ge/1e3).toFixed(1),Me=p.cwd,rt=Me?Yn(Me):null,Te=((It=p.subordinateIds)==null?void 0:It.length)||0,Et=Te>0;return e.jsxs("div",{ref:me,className:`flat-terminal-wrapper ${re||Oe||Fe?"flat-terminal-wrapper--with-side-panel":""}`,style:{"--guake-side-panel-width":`min(${Ae}px, 70%)`},children:[e.jsxs("div",{className:"flat-terminal-wrapper__header",children:[e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__header-main ${Ze?"flat-terminal-wrapper__header-main--active":""}`,onClick:jt,onContextMenu:a=>{a.preventDefault(),a.stopPropagation(),dt({x:a.clientX,y:a.clientY})},title:Ze?"Hide agent info":"Show agent info","aria-pressed":Ze,children:[e.jsxs("span",{className:`flat-terminal-wrapper__header-avatar${p.status==="working"?" is-working":""}`,children:[e.jsx(ya,{agent:p,size:28}),p.status==="working"&&e.jsx(aa,{animated:!0,size:12,className:"flat-terminal-wrapper__header-activity"})]}),e.jsxs("span",{className:"flat-terminal-wrapper__header-info",children:[e.jsx("span",{className:"flat-terminal-wrapper__header-name",children:p.name}),e.jsx("span",{className:"flat-terminal-wrapper__header-status",style:{color:Sa(p.status)},title:p.status==="error"&&p.lastError?p.lastError:void 0,children:p.status})]}),p.taskLabel&&e.jsxs("span",{className:"flat-terminal-wrapper__header-task",title:p.taskLabel,children:["📋 ",p.taskLabel]}),e.jsxs("span",{className:"flat-terminal-wrapper__header-model",children:[e.jsx(Aa,{agent:p,alt:`${p.name} provider`,className:"flat-terminal-wrapper__header-provider-icon"}),(()=>{const{model:a,effort:l}=Kn(p);return e.jsxs("span",{className:"flat-terminal-wrapper__header-model-chip",title:l?`Model: ${a} · Effort: ${l}`:`Model: ${a}`,children:[e.jsx("span",{className:"flat-terminal-wrapper__header-model-name",children:a}),l&&e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"flat-terminal-wrapper__header-model-sep","aria-hidden":"true",children:"·"}),e.jsx("span",{className:"flat-terminal-wrapper__header-model-effort",children:l})]})]})})()]})]}),e.jsxs("div",{className:"flat-terminal-wrapper__header-meta",children:[e.jsx("div",{className:"flat-terminal-wrapper__view-mode",children:e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__view-mode-btn flat-terminal-wrapper__view-mode-trigger${tt?" flat-terminal-wrapper__view-mode-trigger--open":""}`,onClick:a=>{const l=a.currentTarget.getBoundingClientRect();Ue({x:l.left,y:l.bottom+4})},title:ae?"Classic TUI — attach to the live interactive claude session in a terminal":qn[m],"aria-haspopup":"menu","aria-expanded":!!tt,"aria-label":"Message view mode",children:[e.jsx("span",{className:"flat-terminal-wrapper__view-mode-icon","aria-hidden":"true",children:ae?e.jsx(d,{name:"terminal",size:13}):xa[m]}),e.jsx("span",{className:"flat-terminal-wrapper__view-mode-label",children:ae?"Classic TUI":ga[m]}),e.jsx(d,{name:"caret-down",size:9})]})}),e.jsxs("div",{className:"flat-terminal-wrapper__actions",role:"group","aria-label":"Terminal actions",children:[e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:te,disabled:!L,title:"Back to previous agent","aria-label":"Back to previous agent",children:e.jsx(d,{name:"arrow-left",size:14})}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__action-btn",onClick:ue,disabled:!_e,title:"Forward to next agent","aria-label":"Forward to next agent",children:e.jsx(d,{name:"arrow-right",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${Ne?"flat-terminal-wrapper__action-btn--active":""}`,onClick:ye,title:Ne?"Close search":"Search messages","aria-pressed":Ne,children:e.jsx(d,{name:Ne?"cross":"search",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn flat-terminal-wrapper__action-btn--danger ${ie?"flat-terminal-wrapper__action-btn--confirm":""}`,onClick:()=>mt.handleClick(Qt,()=>{var a;g.clearContext(o),(a=ve.current)==null||a.historyLoader.clearHistory()}),title:ie?"Click again to confirm clear context":"Clear context",children:e.jsx(d,{name:ie?"question":"clear",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${re?"flat-terminal-wrapper__action-btn--active":""}`,onClick:it,title:re?"Hide git panel":"Show git changes","aria-pressed":re,children:e.jsx(d,{name:"git-branch",size:14})}),e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${Oe?"flat-terminal-wrapper__action-btn--active":""}`,onClick:Se,title:Oe?"Hide buildings panel":"Show area buildings","aria-pressed":Oe,children:e.jsx(d,{name:"buildings",size:14})}),e.jsxs("div",{className:"flat-terminal-wrapper__more",ref:ht,children:[e.jsx("button",{type:"button",className:`flat-terminal-wrapper__action-btn ${Ee?"flat-terminal-wrapper__action-btn--active":""}`,onClick:()=>Ie(a=>!a),title:"More actions","aria-expanded":Ee,children:"⋮"}),Ee&&e.jsxs("div",{className:"flat-terminal-wrapper__more-menu",role:"menu",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-terminal-wrapper__more-item ${Fe?"flat-terminal-wrapper__more-item--active":""}`,onClick:()=>{st(),Ie(!1)},title:Fe?"Hide Debug Panel":"Show Debug Panel",children:[e.jsx(d,{name:"bug",size:14}),e.jsx("span",{children:Fe?"Hide Debug Panel":"Show Debug Panel"})]}),e.jsx("div",{className:"flat-terminal-wrapper__more-divider"}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item",onClick:()=>{g.collapseContext(o),Ie(!1)},disabled:p.status!=="idle",title:p.status!=="idle"?"Agent must be idle to collapse context":"Collapse context",children:[e.jsx(d,{name:"package",size:14}),e.jsx("span",{children:"Collapse context"})]}),Et&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{R(o,Te),Ie(!1)},children:[e.jsx(d,{name:"crown",size:14}),e.jsxs("span",{children:["Clear ",Te," subordinate",Te===1?"":"s"]})]}),e.jsx("div",{className:"flat-terminal-wrapper__more-divider"}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-terminal-wrapper__more-item flat-terminal-wrapper__more-item--danger",onClick:()=>{g.killAgent(o),Ie(!1)},children:[e.jsx(d,{name:"cross",size:14}),e.jsx("span",{children:"Remove agent"})]})]})]})]}),e.jsxs("button",{type:"button",className:`flat-terminal-wrapper__inspector-toggle ${y?"flat-terminal-wrapper__inspector-toggle--active":""}`,onClick:M,title:y?"Hide inspector panel":"Show inspector panel","aria-label":y?"Hide inspector panel":"Show inspector panel","aria-pressed":y,children:[e.jsx("span",{className:"flat-terminal-wrapper__inspector-icon","aria-hidden":"true",children:e.jsxs("svg",{width:"14",height:"14",viewBox:"0 0 16 16",fill:"none",stroke:"currentColor",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",children:[e.jsx("rect",{x:"1.5",y:"2.5",width:"13",height:"11",rx:"1.5"}),e.jsx("line",{x1:"10",y1:"2.5",x2:"10",y2:"13.5"})]})}),e.jsx("span",{className:"flat-terminal-wrapper__inspector-label",children:"Inspector"})]}),e.jsx("button",{type:"button",className:"flat-terminal-wrapper__close",onClick:()=>g.deselectAll(),title:"Close chat","aria-label":"Close chat",children:e.jsx(d,{name:"cross",size:14})})]})]}),Ge&&e.jsxs("div",{className:"flat-chat-actions-sheet-root",role:"presentation",children:[e.jsx("div",{className:"flat-chat-actions-sheet__backdrop",onClick:D}),e.jsxs("div",{className:"flat-chat-actions-sheet",role:"menu","aria-label":"Chat actions",children:[e.jsx("div",{className:"flat-chat-actions-sheet__grabber","aria-hidden":"true"}),e.jsxs("div",{className:"flat-chat-actions-sheet__title-row",children:[e.jsx("span",{className:"flat-chat-actions-sheet__title",children:p.name}),e.jsx("button",{type:"button",className:"flat-chat-actions-sheet__done",onClick:D,children:"Done"})]}),e.jsxs("div",{className:"flat-chat-actions-sheet__grid",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${Ne?"is-active":""}`,onClick:()=>{ye(),D()},children:[e.jsx(d,{name:Ne?"cross":"search",size:20}),e.jsx("span",{children:Ne?"Close search":"Search"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${re?"is-active":""}`,onClick:()=>{it(),D()},children:[e.jsx(d,{name:"git-branch",size:20}),e.jsx("span",{children:"Git changes"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${Oe?"is-active":""}`,onClick:()=>{Se(),D()},children:[e.jsx(d,{name:"buildings",size:20}),e.jsx("span",{children:"Buildings"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__item ${Fe?"is-active":""}`,onClick:()=>{st(),D()},children:[e.jsx(d,{name:"bug",size:20}),e.jsx("span",{children:"Debug"})]})]}),e.jsxs("div",{className:"flat-chat-actions-sheet__list",children:[e.jsxs("button",{type:"button",role:"menuitem",className:`flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger ${ie?"is-armed":""}`,onClick:()=>mt.handleClick(Qt,()=>{var a;g.clearContext(o),(a=ve.current)==null||a.historyLoader.clearHistory(),D()}),children:[e.jsx(d,{name:ie?"question":"clear",size:18}),e.jsx("span",{children:ie?"Tap again to confirm clear":"Clear context"})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row",disabled:p.status!=="idle",onClick:()=>{g.collapseContext(o),D()},children:[e.jsx(d,{name:"package",size:18}),e.jsx("span",{children:"Collapse context"})]}),Et&&e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger",onClick:()=>{R(o,Te),D()},children:[e.jsx(d,{name:"crown",size:18}),e.jsxs("span",{children:["Clear ",Te," subordinate",Te===1?"":"s"]})]}),e.jsxs("button",{type:"button",role:"menuitem",className:"flat-chat-actions-sheet__row flat-chat-actions-sheet__row--danger",onClick:()=>{g.killAgent(o),D()},children:[e.jsx(d,{name:"cross",size:18}),e.jsx("span",{children:"Remove agent"})]})]})]})]}),e.jsx(jn,{agent:p,onClick:A}),ae&&je?e.jsx(Bn,{agentId:o}):Je&&Qe?e.jsx(Cn,{ref:ve,agentId:Je,agent:Qe,viewMode:m,isOpen:!0,onImageClick:k,onFileClick:K,onBashClick:j,onViewMarkdown:v,keyboard:be,hasModalOpen:!1},Je):null,_&&(F||Yt(_.buildingId))&&(()=>{var Le,ot;const a=_.type,l=Yt(_.buildingId),i=(F==null?void 0:F.name)??`Terminal — ${((Le=Q.find(z=>z.id===_.buildingId))==null?void 0:Le.name)??"area"}`,u=l?Ce[ma(_.buildingId)]:(ot=F==null?void 0:F.terminalStatus)==null?void 0:ot.url,$={terminal:"terminal","pm2-logs":"scroll",database:"hard-drives",tests:"flask",http:"globe"},V=a==="terminal"&&!u,S=!V&&!l;return e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"guake-bottom-terminal-resize",onMouseDown:Ft,role:"separator","aria-orientation":"horizontal","aria-label":"Resize embedded panel"}),e.jsxs("div",{className:"flat-bottom-panel",role:"region","aria-label":`${i} panel`,style:{height:Ot},children:[e.jsxs("div",{className:"flat-bottom-panel__header",children:[e.jsxs("span",{className:"flat-bottom-panel__title",children:[e.jsx(d,{name:$[a],size:12}),e.jsx("span",{children:i}),V&&e.jsx("span",{className:"flat-bottom-panel__muted",children:"(starting...)"})]}),e.jsxs("span",{className:"flat-bottom-panel__header-actions",children:[a==="pm2-logs"&&F&&e.jsxs(e.Fragment,{children:[e.jsx("input",{type:"text",className:"guake-bottom-terminal-filter",value:Nt,onChange:z=>ze(z.target.value),placeholder:"Filter logs","aria-label":`Filter logs for ${F.name}`,spellCheck:!1}),e.jsx("select",{className:"guake-bottom-terminal-retention",value:pt===null?"unlimited":String(pt),onChange:z=>{const U=z.target.value==="unlimited"?null:Number(z.target.value);Rt(U),Nn(U)},"aria-label":`Max log retention for ${F.name}`,children:kn.map(z=>e.jsx("option",{value:z===null?"unlimited":String(z),children:z===null?"Unlimited":`${z.toLocaleString()} lines`},z===null?"unlimited":z))}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>g.clearStreamingLogs(_.buildingId),title:"Clear logs",children:e.jsx(d,{name:"trash",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>g.sendBuildingCommand(_.buildingId,"restart"),title:"Restart",children:e.jsx(d,{name:"restart",size:12})})]}),S&&e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:()=>{ee(),ct(_.buildingId)},title:"Maximize — open as modal","aria-label":"Open as modal",children:e.jsx(d,{name:"fullscreen",size:12})}),e.jsx("button",{type:"button",className:"flat-bottom-panel__close",onClick:ee,title:"Close panel","aria-label":"Close panel",children:e.jsx(d,{name:"cross",size:12})})]})]}),e.jsx("div",{className:"flat-bottom-panel__body",children:a==="terminal"?u?e.jsx(wa,{terminalUrl:u,visible:!0}):e.jsx("div",{className:"flat-bottom-panel__placeholder",children:fe??"Starting terminal..."}):a==="pm2-logs"?e.jsx(yn,{buildingId:_.buildingId,filterText:Nt,maxRetention:pt}):F?a==="database"?e.jsx(An,{building:F}):a==="tests"?e.jsx("div",{className:"tests-panel-host",children:e.jsx(Sn,{building:F,autoFocusSearch:!1})}):e.jsx("div",{className:"http-requests-panel-host",children:e.jsx(En,{building:F,autoFocusSearch:!1})}):null})]})]})})(),e.jsxs("div",{className:"flat-terminal-wrapper__statusbar",role:"contentinfo",children:[p.isDetached&&e.jsxs("span",{className:"flat-terminal-wrapper__detached",title:"Reattaching session...",children:[e.jsx(d,{name:"refresh",size:12}),e.jsx("span",{children:"Reattaching"})]}),Me&&rt&&e.jsxs("span",{className:"flat-terminal-wrapper__cwd",title:`Open in file explorer: ${Me}`,"aria-label":`Open ${Me} in file explorer`,role:"button",tabIndex:0,onClick:()=>g.openFileExplorer(Me),onKeyDown:a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),g.openFileExplorer(Me))},children:[e.jsx("span",{className:"flat-terminal-wrapper__cwd-icon",children:e.jsx(d,{name:"folder",size:12})}),e.jsx("span",{className:"flat-terminal-wrapper__cwd-text",children:rt})]}),ut&&ut.map(({areaId:a,areaName:l,dir:i})=>{const u=Ct.get(i),$=De.has(i),V=i.split("/").filter(Boolean).pop()||i;return e.jsxs("span",{className:"flat-terminal-wrapper__area-dir",title:`${l}: ${i}${u?` (${u.branch}${u.ahead?` ↑${u.ahead}`:""}${u.behind?` ↓${u.behind}`:""})`:""}`,onClick:()=>g.openFileExplorerForAreaFolder(a,i),children:[e.jsx(d,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-terminal-wrapper__area-dir-name",children:V}),u&&e.jsxs(e.Fragment,{children:[e.jsxs("span",{className:"flat-terminal-wrapper__area-dir-branch",children:[e.jsx(d,{name:"git-branch",size:10})," ",u.branch]}),u.ahead>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-ahead",title:`${u.ahead} ahead`,children:[e.jsx(d,{name:"arrow-up",size:9}),u.ahead]}),u.behind>0&&e.jsxs("span",{className:"flat-terminal-wrapper__branch-behind",title:`${u.behind} behind`,children:[e.jsx(d,{name:"arrow-down",size:9}),u.behind]}),e.jsx("span",{className:`flat-terminal-wrapper__area-fetch ${$?"flat-terminal-wrapper__area-fetch--fetching":""}`,title:"Git fetch",onClick:S=>{S.stopPropagation(),Xe(i)},children:e.jsx(d,{name:$?"hourglass":"download",size:12})})]})]},`${a}:${i}`)}),e.jsx(Gn,{agentId:o,disabled:((p==null?void 0:p.provider)??"claude")!=="claude"&&((p==null?void 0:p.provider)??"claude")!=="grok",contextSummary:gt?`Context: ${He}k / ${lt}k tokens (${xt}% used)`:void 0,children:e.jsxs("span",{className:"flat-terminal-wrapper__context",tabIndex:0,role:"button",onClick:()=>g.setContextModalAgentId(o),onKeyDown:a=>{(a.key==="Enter"||a.key===" ")&&(a.preventDefault(),g.setContextModalAgentId(o))},title:((p==null?void 0:p.provider)??"claude")!=="claude"&&((p==null?void 0:p.provider)??"claude")!=="grok"?gt?`Context usage: ${He}k / ${lt}k tokens (${xt}% used). Click to view stats.`:"Click to fetch context stats":void 0,children:[e.jsx("span",{className:"flat-terminal-wrapper__context-bar",children:e.jsx("span",{className:"flat-terminal-wrapper__context-bar-fill",style:{width:`${ce}%`,backgroundColor:bt}})}),e.jsxs("span",{className:"flat-terminal-wrapper__context-tokens",style:{color:bt},children:[He,"k/",lt,"k"]}),e.jsxs("span",{className:"flat-terminal-wrapper__context-free",children:["(",Ht,"% free)"]}),!gt&&e.jsx("span",{className:"flat-terminal-wrapper__context-warning",title:"No context stats yet",children:e.jsx(d,{name:"warn",size:12})})]})}),e.jsx("div",{className:"flat-terminal-wrapper__statusbar-spacer","aria-hidden":"true"}),Q.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area terminals",children:Q.map(a=>{const l=(_==null?void 0:_.buildingId)===a.id;return a.isDefault?e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn flat-terminal-wrapper__building-btn--default ${l?"flat-terminal-wrapper__building-btn--active":""}`,title:`${l?"Hide":"Show"} area terminal: ${a.name}`,onClick:()=>{l?ee():Re("terminal",a.id)},children:e.jsx(d,{name:"terminal",size:14})},a.id):e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${l?"flat-terminal-wrapper__building-btn--active":""} ${a.hasUrl?"":"flat-terminal-wrapper__building-btn--offline"}`,title:`${l?"Hide":"Show"} terminal: ${a.name}${a.hasUrl?"":" (starting...)"}`,onClick:()=>{if(l){ee();return}if(a.hasUrl&&wt(a.id)==="modal"){ct(a.id);return}a.hasUrl||g.sendBuildingCommand(a.id,"start"),Re("terminal",a.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),$e(a.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"terminal",size:14})},a.id)})}),se.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area PM2 logs",children:se.map(a=>{const l=(_==null?void 0:_.buildingId)===a.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${l?"flat-terminal-wrapper__building-btn--active":""}`,title:`${l?"Hide":"Show"} logs: ${a.name}`,onClick:()=>{l?ee():wt(a.id)==="modal"?ct(a.id):Re("pm2-logs",a.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),$e(a.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"scroll",size:14})},a.id)})}),nt.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area databases",children:nt.map(a=>{const l=(_==null?void 0:_.buildingId)===a.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${l?"flat-terminal-wrapper__building-btn--active":""}`,title:`${l?"Hide":"Show"} database: ${a.name}`,onClick:()=>{l?ee():wt(a.id)==="modal"?ct(a.id):Re("database",a.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),$e(a.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"hard-drives",size:14})},a.id)})}),qe.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area tests",children:qe.map(a=>{const l=(_==null?void 0:_.buildingId)===a.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${l?"flat-terminal-wrapper__building-btn--active":""} ${a.working?"flat-terminal-wrapper__building-btn--tests-working":""}`,title:a.working?`Running tests: ${a.name}`:`${l?"Hide":"Show"} tests: ${a.name}`,onClick:()=>{l?ee():wt(a.id)==="modal"?ct(a.id):Re("tests",a.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),$e(a.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"flask",size:14})},a.id)})}),ke.length>0&&e.jsx("span",{className:"flat-terminal-wrapper__buildings",role:"group","aria-label":"Area HTTP requests",children:ke.map(a=>{const l=(_==null?void 0:_.buildingId)===a.id;return e.jsx("button",{type:"button",className:`flat-terminal-wrapper__building-btn ${l?"flat-terminal-wrapper__building-btn--active":""}`,title:`${l?"Hide":"Show"} HTTP requests: ${a.name}`,onClick:()=>{l?ee():wt(a.id)==="modal"?ct(a.id):Re("http",a.id)},onContextMenu:i=>{i.preventDefault(),i.stopPropagation(),$e(a.id,{x:i.clientX,y:i.clientY})},children:e.jsx(d,{name:"globe",size:14})},a.id)})}),e.jsx("div",{className:"flat-terminal-wrapper__theme",children:e.jsx(In,{iconOnly:!0})})]}),re&&e.jsx(Mn,{agentId:o,agents:Be,onClose:Bt,branchInfoMap:Ct,fetchRemote:Xe,fetchingDirs:De,onResizeStart:a=>le(a,"right")}),Oe&&e.jsx(Tn,{agentId:o,onClose:oe}),Fe&&e.jsx(Ln,{agentId:o,onClose:Ye}),e.jsx(na,{isOpen:tt!==null,position:tt??{x:0,y:0},worldPosition:{x:0,z:0},actions:Dt,onClose:()=>Ue(null)})]})}),Qn={groups:[],gridCols:1,gridRows:1,positions:new Map};function ss({onAgentClick:c,onBuildingClick:o,onBuildingDoubleClick:m,onBuildingPopup:b,onAreaContextMenu:y,onOpenSpawnModal:M,onOpenBossSpawnModal:A,onOpenAreaModal:k}){const{t:K}=sa(["common"]),j=Wa(),v=n.useMemo(()=>j.size>0?j.values().next().value??null:null,[j]),R=Ha(v===null),be=Ua(),[L,_e]=n.useState(null),[te,ue]=n.useState(null),[Ze,jt]=n.useState(null);va("flatview-image-modal",L!==null,()=>_e(null));const[dt,$e]=n.useState(null),[p,O]=n.useState(null),[we,ve]=n.useState(null),[me,Je]=n.useState(null),[Qe,je]=n.useState(!1),ae=n.useCallback(()=>{je(t=>!t)},[]),et=n.useCallback(()=>{je(!1)},[]),[tt,Ue]=n.useState(()=>{const t=Vt(E.VIEW_MODE);return t==="simple"||t==="chat"||t==="advanced"?t:"simple"}),Dt=n.useCallback(t=>{Ue(t),qt(E.VIEW_MODE,t)},[]);n.useEffect(()=>{const t=s=>{if(s.key!==E.VIEW_MODE)return;const r=s.newValue;(r==="simple"||r==="chat"||r==="advanced")&&Ue(r)};return window.addEventListener("storage",t),()=>window.removeEventListener("storage",t)},[]);const[Ge,pe]=n.useState(()=>ta(E.FLAT_INSPECTOR_OPEN,!1)),[D,ne]=n.useState(!1),ut=n.useCallback(()=>ne(t=>!t),[]),Ct=n.useCallback(()=>ne(!1),[]);n.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-agents-drawer-state",{detail:{open:D}}))},[D]),n.useEffect(()=>{window.dispatchEvent(new CustomEvent("tide-flat-inspector-state",{detail:{open:Ge}}))},[Ge]),n.useEffect(()=>{const t=()=>ne(N=>!N),s=()=>{pe(N=>{const T=!N;return xe(E.FLAT_INSPECTOR_OPEN,T),T})},r=()=>{ne(!1),pe(!1),xe(E.FLAT_INSPECTOR_OPEN,!1)},x=()=>ne(!1),w=()=>{pe(!1),xe(E.FLAT_INSPECTOR_OPEN,!1)};return window.addEventListener("tide-toggle-flat-agents-drawer",t),window.addEventListener("tide-toggle-flat-inspector",s),window.addEventListener("tide-close-flat-side-views",r),window.addEventListener("tide-close-flat-agents-drawer-only",x),window.addEventListener("tide-close-flat-inspector-only",w),()=>{window.removeEventListener("tide-toggle-flat-agents-drawer",t),window.removeEventListener("tide-toggle-flat-inspector",s),window.removeEventListener("tide-close-flat-side-views",r),window.removeEventListener("tide-close-flat-agents-drawer-only",x),window.removeEventListener("tide-close-flat-inspector-only",w)}},[]);const Xe=n.useRef(null),De=n.useRef(null),[Ce,at]=n.useState(()=>{const t=ca(E.FLAT_MIDDLE_WIDTH,0);return t>=$t?t:null}),[fe,Ve]=n.useState(()=>{const t=ca(E.FLAT_INSPECTOR_WIDTH,0);return t>=Jt?t:null}),Q=n.useCallback(t=>{if(typeof window>"u")return t;const s=fe!==null?Pt+fe:0,r=window.innerWidth-ha-Pt-fa-s;return Math.max($t,Math.min(Math.max(r,$t),t))},[fe]),se=n.useCallback(t=>{var w;if(typeof window>"u")return t;const s=(w=Xe.current)==null?void 0:w.querySelector(".flat-middle"),r=(s==null?void 0:s.getBoundingClientRect().width)??$t,x=window.innerWidth-ha-r-Pt-fa-Pt;return Math.max(Jt,Math.min(Math.max(x,Jt),t))},[]);n.useEffect(()=>{if(Ce===null&&fe===null)return;const t=()=>{at(s=>{if(s===null)return s;const r=Q(s);return r===s?s:r}),Ve(s=>{if(s===null)return s;const r=se(s);return r===s?s:r})};return window.addEventListener("resize",t),()=>window.removeEventListener("resize",t)},[Ce,fe,Q,se]);const nt=n.useCallback(t=>{var r;if(t.button!==0)return;const s=(r=Xe.current)==null?void 0:r.querySelector(".flat-middle");s&&(t.currentTarget.setPointerCapture(t.pointerId),De.current={kind:"middle",startX:t.clientX,startWidth:s.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),kt=n.useCallback(t=>{var r;if(t.button!==0)return;const s=(r=Xe.current)==null?void 0:r.querySelector(".flat-inspector");s&&(t.currentTarget.setPointerCapture(t.pointerId),De.current={kind:"inspector",startX:t.clientX,startWidth:s.getBoundingClientRect().width,pointerId:t.pointerId},document.body.classList.add("flat-splitter-dragging"))},[]),qe=n.useCallback(t=>{const s=De.current;if(!s||t.pointerId!==s.pointerId)return;const r=t.clientX-s.startX;s.kind==="middle"?at(Q(s.startWidth+r)):Ve(se(s.startWidth-r))},[Q,se]),ke=n.useCallback(t=>{const s=De.current;if(!s||t.pointerId!==s.pointerId)return;try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}if(De.current=null,document.body.classList.remove("flat-splitter-dragging"),!(Math.abs(t.clientX-s.startX)>2))return;const x=t.clientX-s.startX;if(s.kind==="middle"){const w=Q(s.startWidth+x);at(w),Lt(E.FLAT_MIDDLE_WIDTH,w)}else{const w=se(s.startWidth-x);Ve(w),Lt(E.FLAT_INSPECTOR_WIDTH,w)}},[Q,se]),zt=n.useCallback(()=>{at(null),Lt(E.FLAT_MIDDLE_WIDTH,0)},[]),Ne=n.useCallback(()=>{Ve(null),Lt(E.FLAT_INSPECTOR_WIDTH,0)},[]),[ye,mt]=n.useState(()=>Vt(E.FLAT_INSPECTOR_VIEW)==="tracking"?"tracking":"agent"),ie=n.useCallback(t=>{mt(t),qt(E.FLAT_INSPECTOR_VIEW,t)},[]),_=n.useCallback(()=>{pe(t=>{const s=!t;return xe(E.FLAT_INSPECTOR_OPEN,s),s})},[]),he=n.useCallback(()=>{pe(!1),xe(E.FLAT_INSPECTOR_OPEN,!1)},[]),F=n.useCallback(()=>{ie("tracking"),pe(!0),xe(E.FLAT_INSPECTOR_OPEN,!0)},[ie]),Nt=Ga(),ze=n.useCallback((t,s)=>{_e({url:t,name:s})},[]),pt=n.useCallback((t,s)=>{ue({command:t,output:s,isLive:!1})},[]),Rt=n.useCallback((t,s)=>{var w;const r=j.size>0?Array.from(j)[0]:null,x=r?(w=g.getState().agents.get(r))==null?void 0:w.cwd:void 0;g.setFileViewerPath(t,s,x)},[j]),B=n.useCallback(t=>{jt(t)},[]),Re=n.useCallback((t,s)=>{$e({agentId:t,count:s})},[]),ee=n.useCallback(t=>{m?m(t):o(t)},[o,m]),Ot=n.useCallback(t=>{v&&O({agentId:v,position:t})},[v]),Ft=n.useCallback((t,s)=>{ve({buildingId:t,position:s})},[]);n.useEffect(()=>{je(!1)},[v]);const Ae=n.useRef([]),le=n.useRef(-1),re=n.useRef(!1),ft=n.useRef(Vt(E.LAST_OPENED_AGENT,"")||null),[Oe,yt]=n.useState(!1),[Fe,At]=n.useState(!1),st=n.useRef(!1),Ye=n.useRef(null),it=n.useRef(!1),Se=n.useMemo(()=>new Set(be),[be]),Bt=n.useMemo(()=>{const t=new Map(R.map(r=>[r.id,r])),s=new Map;for(const r of R)if((r.isBoss||r.class==="boss")&&r.subordinateIds&&r.subordinateIds.length>0){const x=r.subordinateIds.map(w=>t.get(w)).filter(w=>w!==void 0);x.length>0&&s.set(r.id,x)}return s},[R]),oe=n.useCallback(()=>{const t=Ae.current,s=le.current;yt(s>0),At(s>=0&&s<t.length-1)},[]),Be=n.useCallback(t=>{const s=Ae.current;if(s.length===0)return;let r=le.current+t;for(;r>=0&&r<s.length;){const x=s[r];if(Se.has(x)){re.current=!0,le.current=r,oe(),g.selectAgent(x);return}r+=t}},[Se,oe]),We=n.useCallback(()=>Be(-1),[Be]),St=n.useCallback(()=>Be(1),[Be]);Rn(n.useCallback(()=>{const t=Ae.current,s=le.current;return t.length>0&&s>0?(Be(-1),"handled"):"exit"},[Be]));const Ee=n.useCallback((t,s)=>{if(typeof window>"u")return;const r=window.history.state,w={...typeof r=="object"&&r!==null?r:{},__flatAgentNav:{agentId:t}};s==="replace"?window.history.replaceState(w,"",window.location.href):window.history.pushState(w,"",window.location.href)},[]);n.useEffect(()=>{if(!v){st.current=!1,Ye.current=null;return}if(!st.current){Ee(v,"replace"),st.current=!0,Ye.current=v;return}if(it.current){it.current=!1,Ye.current=v;return}Ye.current!==v&&(Ee(v,"push"),Ye.current=v)},[v,Ee]),n.useEffect(()=>{const t=s=>{var N,T;const r=(T=(N=s.state)==null?void 0:N.__flatAgentNav)==null?void 0:T.agentId;if(!r||typeof r!="string"||!Se.has(r)||r===v)return;it.current=!0,re.current=!0;const x=Ae.current,w=x.lastIndexOf(r);w>=0?le.current=w:(x.push(r),le.current=x.length-1),oe(),g.selectAgent(r)};return window.addEventListener("popstate",t),()=>window.removeEventListener("popstate",t)},[Se,v,oe]),n.useEffect(()=>{if(!v){Ae.current=[],le.current=-1,oe();return}if(ft.current=v,qt(E.LAST_OPENED_AGENT,v),re.current){re.current=!1,oe();return}const t=Ae.current,s=le.current;if(s>=0&&t[s]===v){oe();return}const r=s<t.length-1?t.slice(0,s+1):t.slice();r.push(v),r.length>100&&r.shift(),Ae.current=r,le.current=r.length-1,oe()},[v,oe]);const Ie=n.useCallback(t=>{c(t),ne(!1)},[c]),ht=v??"",gt=n.useCallback(()=>{},[]),Wt=n.useCallback(t=>{Ie(t)},[Ie]),ge=Ge,[ce,xt]=n.useState(ge),[Ht,bt]=n.useState(ge),He=ja(Qe||Ze!==null||ce&&ye==="agent"?v:null);n.useEffect(()=>{if(ge){xt(!0);return}bt(!1);const t=setTimeout(()=>xt(!1),240);return()=>clearTimeout(t)},[ge]),n.useEffect(()=>{if(!ce||!ge)return;let t=0;const s=requestAnimationFrame(()=>{t=requestAnimationFrame(()=>bt(!0))});return()=>{cancelAnimationFrame(s),cancelAnimationFrame(t)}},[ce,ge]);const lt=n.useRef(null);n.useEffect(()=>{if(v)return;const t=s=>{if(s.key!==" "&&s.key!=="Backspace")return;const r=s.target;if(r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.isContentEditable)return;const x=ft.current;!x||!Se.has(x)||(s.preventDefault(),g.selectAgent(x))};return document.addEventListener("keydown",t),()=>document.removeEventListener("keydown",t)},[v,Se]);const[Me,rt]=n.useState(new Set),Te=n.useCallback(t=>{rt(s=>{const r=new Set(s);return r.has(t)?r.delete(t):r.add(t),r})},[]),Et=n.useCallback(t=>{rt(new Set(t))},[]),[Z,It]=n.useState(()=>typeof window<"u"&&window.matchMedia("(max-width: 768px)").matches);n.useEffect(()=>{if(typeof window>"u")return;const t=window.matchMedia("(max-width: 768px)"),s=r=>It(r.matches);return t.addEventListener("change",s),()=>t.removeEventListener("change",s)},[]);const[a,l]=n.useState(null),i=n.useCallback(t=>{l(s=>s===t?null:t)},[]),u=Ca(),$=ka(),[V]=Xa(),S=n.useMemo(()=>{if(v)return Qn;const t=new Map,s=[];for(const h of R){const C=g.getAreaForAgent(h.id);if(!da((C==null?void 0:C.id)??null))continue;if(!C||C.archived){s.push(h);continue}const P=t.get(C.id);P?P.push(h):t.set(C.id,[h])}const r=new Map,x=[];for(const h of $.values()){let C=!1;for(const P of u.values())if(!P.archived&&ua(P.id)&&g.isPositionInArea(h.position,P)){const de=r.get(P.id);de?de.push(h):r.set(P.id,[h]),C=!0;break}!C&&da(null)&&x.push(h)}const w=[];for(const[,h]of u){if(h.archived||!ua(h.id))continue;const C=t.get(h.id),P=r.get(h.id)??[];(C&&C.length>0||P.length>0)&&w.push({area:h,agents:C??[],buildings:P})}(s.length>0||x.length>0)&&w.push({area:{id:"__unassigned__",name:"Unassigned",color:"#6272a4",center:{x:0,z:0},type:"circle",radius:0,directories:[],archived:!1,assignedAgentIds:[],zIndex:0},agents:s,buildings:x});const N=w.filter(h=>h.area.id!=="__unassigned__"),T=w.filter(h=>h.area.id==="__unassigned__");let G=1,W=1;const f=new Map;if(N.length>1){let h=1/0,C=-1/0,P=1/0,de=-1/0;for(const q of N)h=Math.min(h,q.area.center.x),C=Math.max(C,q.area.center.x),P=Math.min(P,q.area.center.z),de=Math.max(de,q.area.center.z);const Pe=C-h||1,Mt=de-P||1;if(N.length<=4){G=N.length,W=1;const q=[...N].sort((Y,Ut)=>Y.area.center.x-Ut.area.center.x);for(let Y=0;Y<q.length;Y++)f.set(q[Y].area.id,{row:1,col:Y+1})}else{const q=[...N].sort((I,H)=>I.area.center.x-H.area.center.x),Y=[];for(let I=1;I<q.length;I++)Y.push(q[I].area.center.x-q[I-1].area.center.x);const Ut=Y.reduce((I,H)=>I+H,0)/Y.length||1;let ia=1;for(const I of Y)I>Ut*1.3&&ia++;G=Math.max(2,Math.min(ia,N.length));const Gt=[...N].sort((I,H)=>I.area.center.z-H.area.center.z),Tt=[];for(let I=1;I<Gt.length;I++)Tt.push(Gt[I].area.center.z-Gt[I-1].area.center.z);const Ma=Tt.reduce((I,H)=>I+H,0)/Tt.length||1;let la=1;for(const I of Tt)I>Ma*1.3&&la++;W=Math.max(2,Math.min(la,N.length)),G=Math.max(G,Math.ceil(N.length/W)),W=Math.max(W,Math.ceil(N.length/G));const Ta=Pe/G,La=Mt/W,Xt=new Set;for(const I of N){let H=Math.min(G-1,Math.max(0,Math.floor((I.area.center.x-h)/Ta))),Ke=Math.min(W-1,Math.max(0,Math.floor((I.area.center.z-P)/La))),_t=`${Ke},${H}`,ra=0;const Pa=W*G;for(;Xt.has(_t)&&ra<Pa;)H++,H>=G&&(H=0,Ke=(Ke+1)%W),_t=`${Ke},${H}`,ra++;Xt.has(_t)&&(Ke=W,H=0,_t=`${Ke},${H}`,W++),Xt.add(_t),f.set(I.area.id,{row:Ke+1,col:H+1})}}}const J=h=>{h.sort((C,P)=>{var Pe,Mt,q,Y;const de=(((Pe=C.position)==null?void 0:Pe.z)??0)-(((Mt=P.position)==null?void 0:Mt.z)??0);return de!==0?de:(((q=C.position)==null?void 0:q.x)??0)-(((Y=P.position)==null?void 0:Y.x)??0)})};for(const h of N)J(h.agents);for(const h of T)J(h.agents);const X=[...N,...T].sort((h,C)=>h.area.name.localeCompare(C.area.name,void 0,{sensitivity:"base",numeric:!0})||h.area.id.localeCompare(C.area.id));return f.clear(),X.forEach((h,C)=>{f.set(h.area.id,{row:Math.floor(C/G)+1,col:C%G+1})}),W=Math.max(1,Math.ceil(X.length/G)),{groups:X,gridCols:G,gridRows:W,positions:f}},[R,u,$,V,v]),Le=n.useMemo(()=>{let t=0,s=0;for(const r of S.groups)t+=r.agents.length,s+=r.agents.filter(x=>x.status==="working").length;return{areaCount:S.groups.length,agentCount:t,workingCount:s}},[S]),ot=n.useMemo(()=>{if(!p)return[];const t=g.getState().agents.get(p.agentId);return t?[{id:"edit-agent",label:"Edit Agent",icon:e.jsx(d,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:open-agent-edit",{detail:{agentId:t.id}}))}},{id:"open-chat",label:"Open Chat",icon:e.jsx(d,{name:"chat",size:14}),onClick:()=>c(t.id)},{id:"clone-agent",label:"Clone Agent",icon:e.jsx(d,{name:"clipboard",size:14}),onClick:()=>g.cloneAgent(t.id)},{id:"fork-agent",label:"Fork Agent (with history)",icon:e.jsx(d,{name:"git-branch",size:14}),onClick:()=>g.forkAgent(t.id)},{id:"delete-agent",label:"Delete Agent",icon:e.jsx(d,{name:"trash",size:14}),danger:!0,onClick:()=>{Je({agentId:t.id,name:t.name})}}]:[]},[p,c]),z=n.useMemo(()=>{var N;if(!we)return[];const t=$.get(we.buildingId);if(!t)return[];const s=[],r=t.type==="server"||t.type==="docker"||t.type==="terminal",x=t.status==="running",w=t.type==="boss";if(s.push({id:"open",label:t.type==="database"?"Open Database":t.type==="folder"?"Open Folder":t.type==="tests"?"Open Tests":t.type==="http"?"Open Requests":t.type==="boss"?"View Boss Logs":t.type==="terminal"?"Open Terminal":t.type==="server"&&((N=t.pm2)!=null&&N.enabled)?"View PM2 Logs":"Open",icon:e.jsx(d,{name:t.type==="database"?"database":t.type==="folder"?"folder":t.type==="tests"?"flask":t.type==="http"?"globe":t.type==="terminal"?"terminal":"eye",size:14}),onClick:()=>ee(t.id)}),r&&(x||s.push({id:"start",label:"Start",icon:e.jsx(d,{name:"play",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"start")}),x&&(s.push({id:"restart",label:"Restart",icon:e.jsx(d,{name:"refresh",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"restart")}),s.push({id:"stop",label:"Stop",icon:e.jsx(d,{name:"stop",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"stop")}))),w&&t.subordinateBuildingIds&&t.subordinateBuildingIds.length>0&&(s.push({id:"start-all",label:"Start All Subordinates",icon:e.jsx(d,{name:"launch",size:14}),onClick:()=>{for(const T of t.subordinateBuildingIds)g.sendBuildingCommand(T,"start")}}),s.push({id:"stop-all",label:"Stop All Subordinates",icon:e.jsx(d,{name:"pause",size:14}),onClick:()=>{for(const T of t.subordinateBuildingIds)g.sendBuildingCommand(T,"stop")}}),s.push({id:"restart-all",label:"Restart All Subordinates",icon:e.jsx(d,{name:"restart",size:14}),onClick:()=>{for(const T of t.subordinateBuildingIds)g.sendBuildingCommand(T,"restart")}})),r&&s.push({id:"health-check",label:"Health Check",icon:e.jsx(d,{name:"health",size:14}),onClick:()=>g.sendBuildingCommand(t.id,"healthCheck")}),s.push({id:"divider-edit",label:"",divider:!0,onClick:()=>{}}),s.push({id:"edit",label:"Edit Building",icon:e.jsx(d,{name:"edit",size:14}),onClick:()=>{window.dispatchEvent(new CustomEvent("tide:building-edit",{detail:{buildingId:t.id}}))}}),s.push({id:"clone",label:"Clone Building",icon:e.jsx(d,{name:"copy",size:14}),onClick:()=>{g.createBuilding({name:`${t.name} (Copy)`,type:t.type,style:t.style,color:t.color,scale:t.scale,position:{x:t.position.x+2,z:t.position.z+2},cwd:t.cwd,folderPath:t.folderPath,commands:t.commands,pm2:t.pm2,docker:t.docker,database:t.database,terminal:t.terminal,urls:t.urls,subordinateBuildingIds:t.subordinateBuildingIds})}}),t.urls&&t.urls.length>0)for(const T of t.urls)s.push({id:`url-${T.label}`,label:T.label,icon:e.jsx(d,{name:"link",size:14}),onClick:()=>window.open(T.url,"_blank","noopener,noreferrer")});return s.push({id:"divider-danger",label:"",divider:!0,onClick:()=>{}}),s.push({id:"delete",label:"Delete Building",icon:e.jsx(d,{name:"trash",size:14}),danger:!0,onClick:()=>g.deleteBuilding(t.id)}),s},[we,$,ee]),U=n.useCallback(t=>{rt(new Set([t])),requestAnimationFrame(()=>{const s=lt.current;if(!s)return;const r=s.querySelector(`[data-area-id="${t}"]`);if(!r)return;const x=s.getBoundingClientRect(),N=r.getBoundingClientRect().top-x.top+s.scrollTop-8;s.scrollTo({top:Math.max(0,N),behavior:"smooth"})})},[]);return e.jsxs("div",{ref:Xe,className:`flat-view ${ge?"flat-view--with-inspector":""} ${v?"flat-view--has-chat":""} ${D?"flat-view--mobile-sidebar-open":""}`,style:(()=>{if(Ce===null&&fe===null)return;const t={};return Ce!==null&&(t["--flat-middle-width"]=`${Ce}px`),fe!==null&&(t["--flat-inspector-width"]=`${fe}px`),t})(),children:[D&&e.jsx("div",{className:"flat-mobile-sidebar-backdrop",onClick:Ct,"aria-hidden":"true"}),e.jsxs("div",{className:"flat-middle",children:[e.jsx("div",{className:"flat-middle__header",children:e.jsxs("div",{className:"flat-middle__actions",children:[e.jsx("button",{className:"flat-cta-btn flat-cta-btn--agent",onClick:M,title:"Create new agent",children:"+ Agent"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--boss",onClick:A,title:"Create new boss agent",children:"+ Boss"}),e.jsx("button",{className:"flat-cta-btn flat-cta-btn--area",onClick:k,title:"Create new area",children:"+ Area"})]})}),e.jsx("div",{className:"flat-middle__content",children:e.jsx(Va,{activeAgentId:ht,onClose:gt,onSelectAgent:Wt,expandedAreas:Me,onToggleArea:Te,onSetExpandedAreas:Et,agentListRef:lt})})]}),e.jsx("div",{className:"flat-splitter flat-splitter--middle",role:"separator","aria-orientation":"vertical","aria-label":"Resize agents panel",title:"Drag to resize · Double-click to reset",onPointerDown:nt,onPointerMove:qe,onPointerUp:ke,onPointerCancel:ke,onDoubleClick:zt}),e.jsxs("div",{className:"flat-right",children:[e.jsxs("button",{type:"button",className:"flat-mobile-sidebar-toggle","aria-label":D?"Close agents sidebar":"Open agents sidebar","aria-expanded":D,onClick:ut,children:[e.jsx(d,{name:"list",size:18}),e.jsx("span",{className:"flat-mobile-sidebar-toggle__label",children:"Agents"})]}),v?e.jsx(Jn,{agentId:v,terminalViewMode:tt,onTerminalViewModeChange:Dt,inspectorOpen:Ge,onToggleInspector:_,onShowTaskBoard:F,onImageClick:ze,onFileClick:Rt,onBashClick:pt,onViewMarkdown:B,onRequestClearSubordinates:Re,keyboard:Nt,canNavigateBack:Oe,canNavigateForward:Fe,onNavigateBack:We,onNavigateForward:St,agentInfoOpen:Qe,onToggleAgentInfo:ae,onHeaderContextMenu:Ot,onBuildingContextMenu:Ft}):e.jsx("div",{className:"flat-chat flat-chat--empty",children:e.jsxs("div",{className:"flat-map",children:[e.jsxs("div",{className:"flat-map__header",children:[e.jsx("span",{className:"flat-map__title",children:"🗺️ Areas"}),e.jsx("span",{className:"flat-map__hint",children:"Click an area to focus it, or an agent to chat"}),e.jsxs("span",{className:"flat-map__stats",children:[e.jsxs("span",{children:[Le.areaCount," areas"]}),e.jsxs("span",{children:[Le.agentCount," agents"]}),Le.workingCount>0&&e.jsxs("span",{className:"flat-map__stats-working",children:[e.jsx("span",{className:"flat-map__stats-dot","aria-hidden":"true"}),Le.workingCount," working"]})]}),e.jsx(Xn,{className:"flat-map__view-mode"})]}),e.jsx("div",{className:"flat-map__grid",style:{gridTemplateColumns:Z?"repeat(2, minmax(0, 1fr))":`repeat(${S.gridCols}, 1fr)`},children:S.groups.length===0?e.jsx("div",{className:"flat-map__empty",children:e.jsx("span",{children:"No areas or agents yet"})}):(Z?[...S.groups].sort((s,r)=>{const x=S.positions.get(s.area.id),w=S.positions.get(r.area.id);return!x&&!w?0:x?w?x.row-w.row||x.col-w.col:-1:1}):S.groups).map(s=>{var W;const r=s.area.id,x=S.positions.get(r),w=s.agents.filter(f=>f.status==="working").length,N=w>0,T=Z&&a!==r,G=Z&&!T;return e.jsxs("div",{className:`flat-map-area-card${N?" flat-map-area-card--working":""}${T?" flat-map-area-card--collapsed":""}${G?" flat-map-area-card--expanded":""}`,style:{"--area-color":s.area.color,gridRow:Z||x==null?void 0:x.row,gridColumn:Z||x==null?void 0:x.col},onContextMenu:f=>{y&&(f.preventDefault(),f.stopPropagation(),y(r,{x:f.clientX,y:f.clientY}))},children:[e.jsxs("button",{type:"button",className:"flat-map-area-card__header",onClick:()=>Z?i(r):U(r),title:Z?T?`Expand ${s.area.name}`:`Collapse ${s.area.name}`:`Focus ${s.area.name} in left panel`,"aria-expanded":Z?!T:void 0,children:[e.jsx("span",{className:"flat-map-area-card__color",style:{background:s.area.color}}),((W=s.area.logo)==null?void 0:W.filename)&&e.jsx("img",{className:"flat-map-area-card__logo",src:zn(s.area.logo.filename),alt:"","aria-hidden":"true",onError:f=>{f.currentTarget.style.display="none"}}),e.jsx("span",{className:"flat-map-area-card__name",children:s.area.name}),e.jsxs("span",{className:"flat-map-area-card__count",title:`${s.agents.length} agent${s.agents.length===1?"":"s"}`,"aria-label":`${s.agents.length} agent${s.agents.length===1?"":"s"}`,children:[e.jsx(d,{name:"users",size:10}),s.agents.length]}),N&&e.jsxs("span",{className:"flat-map-area-card__working",title:`${w} working agent${w===1?"":"s"}`,"aria-label":`${w} working agent${w===1?"":"s"}`,children:[e.jsx(aa,{animated:!0,size:12,className:"flat-map-area-card__working-glyph"}),e.jsx("span",{className:"flat-map-area-card__working-count",children:w})]}),Z&&e.jsx(d,{name:T?"caret-down":"caret-up",size:11,className:"flat-map-area-card__caret"})]}),e.jsx("div",{className:"flat-map-area-card__agents",children:s.agents.map(f=>{const J=f.isBoss||f.class==="boss",X=J?Bt.get(f.id):void 0,h=Na(f),C=h.usedPercent>=80?"#ff4a4a":h.usedPercent>=60?"#ff9e4a":h.usedPercent>=40?"#ffd700":"#4aff9e",P=`Context: ${(h.totalTokens/1e3).toFixed(1)}k / ${(h.contextWindow/1e3).toFixed(1)}k (${h.usedPercent}% used, ${h.freePercent}% free)`,de=f.latestTodos&&f.latestTodos.length>0||X&&X.length>0;return e.jsx(qa,{todos:f.latestTodos,subordinates:X,position:"top",children:e.jsxs("button",{type:"button",className:`flat-map-agent-chip ${f.status}`,onClick:()=>c(f.id),onContextMenu:Pe=>{Pe.preventDefault(),Pe.stopPropagation(),O({agentId:f.id,position:{x:Pe.clientX,y:Pe.clientY}})},title:de?void 0:`${J?"Boss · ":""}Open chat with ${f.name}
2
- ${P}`,children:[e.jsx(ya,{agent:f,size:16}),J&&e.jsx("span",{className:"flat-map-agent-chip__crown","aria-hidden":"true",children:e.jsx(d,{name:"crown",size:11,color:"#ffd700",weight:"fill"})}),e.jsx("span",{className:"flat-map-agent-chip__name",children:f.name}),e.jsx(Aa,{agent:f,alt:`${f.name} provider`,className:"flat-map-agent-chip__provider-icon"}),f.status==="working"?e.jsx(aa,{animated:!0,size:11,className:"flat-map-agent-chip__activity"}):e.jsx("span",{className:"flat-map-agent-chip__dot",style:{backgroundColor:Sa(f.status)}}),f.latestTodos&&f.latestTodos.length>0&&e.jsx(Ya,{todos:f.latestTodos,maxDots:6}),J&&X&&X.length>0&&e.jsx(Ka,{subordinates:X,maxDots:6}),e.jsx("span",{className:"flat-map-agent-chip__context-bar","aria-hidden":"true",children:e.jsx("span",{className:"flat-map-agent-chip__context-bar-fill",style:{width:`${h.usedPercent}%`,backgroundColor:C}})})]})},f.id)})}),s.area.directories.length>0&&e.jsx("div",{className:"flat-map-area-card__folders",role:"group","aria-label":`${s.area.name} folders`,children:s.area.directories.map(f=>{const J=f.split("/").filter(Boolean).pop()||f;return e.jsxs("button",{type:"button",className:"flat-map-folder-chip",onClick:X=>{X.stopPropagation(),g.openFileExplorerForAreaFolder(r,f)},title:`Open in file explorer: ${f}`,children:[e.jsx(d,{name:"folder-open",size:12}),e.jsx("span",{className:"flat-map-folder-chip__name",children:J})]},f)})}),s.buildings.length>0&&e.jsx("div",{className:"flat-map-area-card__buildings",children:s.buildings.map(f=>{var X;const J=(X=Za[f.type])==null?void 0:X.color;return e.jsxs("button",{type:"button",className:`flat-map-building-chip flat-map-building-chip--${f.status}`,style:J?{"--building-type-color":J}:void 0,onClick:h=>{if(b){const C=h.currentTarget.getBoundingClientRect();b(f.id,{x:C.right,y:C.top+C.height/2})}else ee(f.id)},onContextMenu:h=>{h.preventDefault(),h.stopPropagation(),ve({buildingId:f.id,position:{x:h.clientX,y:h.clientY}})},title:`${f.name} · ${f.type} · ${f.status}`,children:[e.jsx(d,{name:Ja(f.type),size:12,color:J}),e.jsx("span",{className:"flat-map-building-chip__name",children:f.name}),e.jsx("span",{className:"flat-map-building-chip__dot",style:{backgroundColor:Qa(f.status)}})]},f.id)})})]},r)})})]})})]}),ge&&e.jsx("div",{className:"flat-splitter flat-splitter--inspector",role:"separator","aria-orientation":"vertical","aria-label":"Resize inspector panel",title:"Drag to resize · Double-click to reset",onPointerDown:kt,onPointerMove:qe,onPointerUp:ke,onPointerCancel:ke,onDoubleClick:Ne}),ce&&e.jsxs("aside",{className:`flat-inspector ${Ht?"flat-inspector--open":"flat-inspector--closing"}`,"aria-label":"Inspector panel",children:[e.jsxs("div",{className:"flat-inspector__header",children:[e.jsxs("div",{className:"flat-inspector__tabs",role:"tablist","aria-label":"Inspector view",children:[e.jsx("button",{type:"button",role:"tab","aria-selected":ye==="agent",className:`flat-inspector__tab ${ye==="agent"?"flat-inspector__tab--active":""}`,onClick:()=>ie("agent"),children:"Agent"}),e.jsx("button",{type:"button",role:"tab","aria-selected":ye==="tracking",className:`flat-inspector__tab ${ye==="tracking"?"flat-inspector__tab--active":""}`,onClick:()=>ie("tracking"),children:"Tracking"})]}),e.jsx("button",{type:"button",className:"flat-inspector__close",onClick:he,title:"Close inspector","aria-label":"Close inspector",children:"✕"})]}),e.jsx("div",{className:"flat-inspector__body",children:ye==="tracking"?e.jsx(en,{activeAgentId:v??"",onSelectAgent:t=>{c(t),window.innerWidth<=768&&he()}}):v?He?e.jsx(tn,{agent:He,onFocusAgent:t=>{c(t),window.innerWidth<=768&&he()},onKillAgent:t=>g.killAgent(t)}):e.jsx("div",{className:"flat-inspector__empty",children:e.jsx("span",{children:"Agent not found"})}):e.jsx("div",{className:"flat-inspector__empty",children:e.jsx("span",{children:"Select an agent to inspect"})})})]}),L&&e.jsx(an,{url:L.url,name:L.name,onClose:()=>_e(null)}),te&&e.jsx(nn,{state:te,onClose:()=>ue(null)}),e.jsx(sn,{agent:He??null,content:Ze,onClose:()=>jt(null)}),dt&&e.jsx(ln,{action:"clear-subordinates",selectedAgentId:dt.agentId,subordinateCount:dt.count,onClose:()=>$e(null),onClearHistory:()=>{}}),e.jsx(rn,{agent:He??null,isOpen:Qe&&!!v,onClose:et}),e.jsx(na,{isOpen:p!==null,position:(p==null?void 0:p.position)??{x:0,y:0},worldPosition:{x:0,z:0},actions:ot,onClose:()=>O(null)}),e.jsx(na,{isOpen:we!==null,position:(we==null?void 0:we.position)??{x:0,y:0},worldPosition:{x:0,z:0},actions:z,onClose:()=>ve(null)}),e.jsx(on,{isOpen:me!==null,title:K("common:confirm.removeAgentTitle"),message:K("common:confirm.removeAgentMessage",{name:(me==null?void 0:me.name)??""}),confirmLabel:K("common:buttons.remove"),cancelLabel:K("common:buttons.cancel"),variant:"danger",onConfirm:()=>{me&&g.removeAgentFromServer(me.agentId)},onClose:()=>Je(null)})]})}export{ss as FlatView};