@industry-theme/agent-panels 0.1.8 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2201,7 +2201,7 @@ const createLucideIcon = (iconName, iconNode) => {
2201
2201
  * This source code is licensed under the ISC license.
2202
2202
  * See the LICENSE file in the root directory of this source tree.
2203
2203
  */
2204
- const __iconNode$j = [
2204
+ const __iconNode$o = [
2205
2205
  ["path", { d: "M12 7v14", key: "1akyts" }],
2206
2206
  [
2207
2207
  "path",
@@ -2211,72 +2211,99 @@ const __iconNode$j = [
2211
2211
  }
2212
2212
  ]
2213
2213
  ];
2214
- const BookOpen = createLucideIcon("book-open", __iconNode$j);
2214
+ const BookOpen = createLucideIcon("book-open", __iconNode$o);
2215
2215
  /**
2216
2216
  * @license lucide-react v0.552.0 - ISC
2217
2217
  *
2218
2218
  * This source code is licensed under the ISC license.
2219
2219
  * See the LICENSE file in the root directory of this source tree.
2220
2220
  */
2221
- const __iconNode$i = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
2222
- const Check = createLucideIcon("check", __iconNode$i);
2221
+ const __iconNode$n = [
2222
+ ["path", { d: "M12 8V4H8", key: "hb8ula" }],
2223
+ ["rect", { width: "16", height: "12", x: "4", y: "8", rx: "2", key: "enze0r" }],
2224
+ ["path", { d: "M2 14h2", key: "vft8re" }],
2225
+ ["path", { d: "M20 14h2", key: "4cs60a" }],
2226
+ ["path", { d: "M15 13v2", key: "1xurst" }],
2227
+ ["path", { d: "M9 13v2", key: "rq6x2g" }]
2228
+ ];
2229
+ const Bot = createLucideIcon("bot", __iconNode$n);
2223
2230
  /**
2224
2231
  * @license lucide-react v0.552.0 - ISC
2225
2232
  *
2226
2233
  * This source code is licensed under the ISC license.
2227
2234
  * See the LICENSE file in the root directory of this source tree.
2228
2235
  */
2229
- const __iconNode$h = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
2230
- const ChevronDown = createLucideIcon("chevron-down", __iconNode$h);
2236
+ const __iconNode$m = [["path", { d: "M20 6 9 17l-5-5", key: "1gmf2c" }]];
2237
+ const Check = createLucideIcon("check", __iconNode$m);
2231
2238
  /**
2232
2239
  * @license lucide-react v0.552.0 - ISC
2233
2240
  *
2234
2241
  * This source code is licensed under the ISC license.
2235
2242
  * See the LICENSE file in the root directory of this source tree.
2236
2243
  */
2237
- const __iconNode$g = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
2238
- const ChevronRight = createLucideIcon("chevron-right", __iconNode$g);
2244
+ const __iconNode$l = [["path", { d: "m6 9 6 6 6-6", key: "qrunsl" }]];
2245
+ const ChevronDown = createLucideIcon("chevron-down", __iconNode$l);
2239
2246
  /**
2240
2247
  * @license lucide-react v0.552.0 - ISC
2241
2248
  *
2242
2249
  * This source code is licensed under the ISC license.
2243
2250
  * See the LICENSE file in the root directory of this source tree.
2244
2251
  */
2245
- const __iconNode$f = [
2252
+ const __iconNode$k = [["path", { d: "m9 18 6-6-6-6", key: "mthhwq" }]];
2253
+ const ChevronRight = createLucideIcon("chevron-right", __iconNode$k);
2254
+ /**
2255
+ * @license lucide-react v0.552.0 - ISC
2256
+ *
2257
+ * This source code is licensed under the ISC license.
2258
+ * See the LICENSE file in the root directory of this source tree.
2259
+ */
2260
+ const __iconNode$j = [
2246
2261
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2247
2262
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
2248
2263
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
2249
2264
  ];
2250
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$f);
2265
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$j);
2251
2266
  /**
2252
2267
  * @license lucide-react v0.552.0 - ISC
2253
2268
  *
2254
2269
  * This source code is licensed under the ISC license.
2255
2270
  * See the LICENSE file in the root directory of this source tree.
2256
2271
  */
2257
- const __iconNode$e = [
2272
+ const __iconNode$i = [
2273
+ ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
2274
+ ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
2275
+ ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
2276
+ ];
2277
+ const CodeXml = createLucideIcon("code-xml", __iconNode$i);
2278
+ /**
2279
+ * @license lucide-react v0.552.0 - ISC
2280
+ *
2281
+ * This source code is licensed under the ISC license.
2282
+ * See the LICENSE file in the root directory of this source tree.
2283
+ */
2284
+ const __iconNode$h = [
2258
2285
  ["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
2259
2286
  ["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
2260
2287
  ];
2261
- const Code = createLucideIcon("code", __iconNode$e);
2288
+ const Code = createLucideIcon("code", __iconNode$h);
2262
2289
  /**
2263
2290
  * @license lucide-react v0.552.0 - ISC
2264
2291
  *
2265
2292
  * This source code is licensed under the ISC license.
2266
2293
  * See the LICENSE file in the root directory of this source tree.
2267
2294
  */
2268
- const __iconNode$d = [
2295
+ const __iconNode$g = [
2269
2296
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
2270
2297
  ["path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2", key: "zix9uf" }]
2271
2298
  ];
2272
- const Copy = createLucideIcon("copy", __iconNode$d);
2299
+ const Copy = createLucideIcon("copy", __iconNode$g);
2273
2300
  /**
2274
2301
  * @license lucide-react v0.552.0 - ISC
2275
2302
  *
2276
2303
  * This source code is licensed under the ISC license.
2277
2304
  * See the LICENSE file in the root directory of this source tree.
2278
2305
  */
2279
- const __iconNode$c = [
2306
+ const __iconNode$f = [
2280
2307
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
2281
2308
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
2282
2309
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -2286,14 +2313,14 @@ const __iconNode$c = [
2286
2313
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
2287
2314
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
2288
2315
  ];
2289
- const Expand = createLucideIcon("expand", __iconNode$c);
2316
+ const Expand = createLucideIcon("expand", __iconNode$f);
2290
2317
  /**
2291
2318
  * @license lucide-react v0.552.0 - ISC
2292
2319
  *
2293
2320
  * This source code is licensed under the ISC license.
2294
2321
  * See the LICENSE file in the root directory of this source tree.
2295
2322
  */
2296
- const __iconNode$b = [
2323
+ const __iconNode$e = [
2297
2324
  [
2298
2325
  "path",
2299
2326
  {
@@ -2305,14 +2332,14 @@ const __iconNode$b = [
2305
2332
  ["path", { d: "M10 12.5 8 15l2 2.5", key: "1tg20x" }],
2306
2333
  ["path", { d: "m14 12.5 2 2.5-2 2.5", key: "yinavb" }]
2307
2334
  ];
2308
- const FileCode = createLucideIcon("file-code", __iconNode$b);
2335
+ const FileCode = createLucideIcon("file-code", __iconNode$e);
2309
2336
  /**
2310
2337
  * @license lucide-react v0.552.0 - ISC
2311
2338
  *
2312
2339
  * This source code is licensed under the ISC license.
2313
2340
  * See the LICENSE file in the root directory of this source tree.
2314
2341
  */
2315
- const __iconNode$a = [
2342
+ const __iconNode$d = [
2316
2343
  [
2317
2344
  "path",
2318
2345
  {
@@ -2325,14 +2352,39 @@ const __iconNode$a = [
2325
2352
  ["path", { d: "M16 13H8", key: "t4e002" }],
2326
2353
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
2327
2354
  ];
2328
- const FileText = createLucideIcon("file-text", __iconNode$a);
2355
+ const FileText = createLucideIcon("file-text", __iconNode$d);
2329
2356
  /**
2330
2357
  * @license lucide-react v0.552.0 - ISC
2331
2358
  *
2332
2359
  * This source code is licensed under the ISC license.
2333
2360
  * See the LICENSE file in the root directory of this source tree.
2334
2361
  */
2335
- const __iconNode$9 = [
2362
+ const __iconNode$c = [
2363
+ [
2364
+ "path",
2365
+ {
2366
+ d: "M20 10a1 1 0 0 0 1-1V6a1 1 0 0 0-1-1h-2.5a1 1 0 0 1-.8-.4l-.9-1.2A1 1 0 0 0 15 3h-2a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",
2367
+ key: "hod4my"
2368
+ }
2369
+ ],
2370
+ [
2371
+ "path",
2372
+ {
2373
+ d: "M20 21a1 1 0 0 0 1-1v-3a1 1 0 0 0-1-1h-2.9a1 1 0 0 1-.88-.55l-.42-.85a1 1 0 0 0-.92-.6H13a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1Z",
2374
+ key: "w4yl2u"
2375
+ }
2376
+ ],
2377
+ ["path", { d: "M3 5a2 2 0 0 0 2 2h3", key: "f2jnh7" }],
2378
+ ["path", { d: "M3 3v13a2 2 0 0 0 2 2h3", key: "k8epm1" }]
2379
+ ];
2380
+ const FolderTree = createLucideIcon("folder-tree", __iconNode$c);
2381
+ /**
2382
+ * @license lucide-react v0.552.0 - ISC
2383
+ *
2384
+ * This source code is licensed under the ISC license.
2385
+ * See the LICENSE file in the root directory of this source tree.
2386
+ */
2387
+ const __iconNode$b = [
2336
2388
  [
2337
2389
  "path",
2338
2390
  {
@@ -2341,14 +2393,14 @@ const __iconNode$9 = [
2341
2393
  }
2342
2394
  ]
2343
2395
  ];
2344
- const Folder = createLucideIcon("folder", __iconNode$9);
2396
+ const Folder = createLucideIcon("folder", __iconNode$b);
2345
2397
  /**
2346
2398
  * @license lucide-react v0.552.0 - ISC
2347
2399
  *
2348
2400
  * This source code is licensed under the ISC license.
2349
2401
  * See the LICENSE file in the root directory of this source tree.
2350
2402
  */
2351
- const __iconNode$8 = [
2403
+ const __iconNode$a = [
2352
2404
  [
2353
2405
  "path",
2354
2406
  {
@@ -2358,49 +2410,49 @@ const __iconNode$8 = [
2358
2410
  ],
2359
2411
  ["path", { d: "M9 18c-4.51 2-5-2-7-2", key: "9comsn" }]
2360
2412
  ];
2361
- const Github = createLucideIcon("github", __iconNode$8);
2413
+ const Github = createLucideIcon("github", __iconNode$a);
2362
2414
  /**
2363
2415
  * @license lucide-react v0.552.0 - ISC
2364
2416
  *
2365
2417
  * This source code is licensed under the ISC license.
2366
2418
  * See the LICENSE file in the root directory of this source tree.
2367
2419
  */
2368
- const __iconNode$7 = [
2420
+ const __iconNode$9 = [
2369
2421
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2370
2422
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
2371
2423
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
2372
2424
  ];
2373
- const Globe = createLucideIcon("globe", __iconNode$7);
2425
+ const Globe = createLucideIcon("globe", __iconNode$9);
2374
2426
  /**
2375
2427
  * @license lucide-react v0.552.0 - ISC
2376
2428
  *
2377
2429
  * This source code is licensed under the ISC license.
2378
2430
  * See the LICENSE file in the root directory of this source tree.
2379
2431
  */
2380
- const __iconNode$6 = [
2432
+ const __iconNode$8 = [
2381
2433
  ["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" }],
2382
2434
  ["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
2383
2435
  ["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }]
2384
2436
  ];
2385
- const Monitor = createLucideIcon("monitor", __iconNode$6);
2437
+ const Monitor = createLucideIcon("monitor", __iconNode$8);
2386
2438
  /**
2387
2439
  * @license lucide-react v0.552.0 - ISC
2388
2440
  *
2389
2441
  * This source code is licensed under the ISC license.
2390
2442
  * See the LICENSE file in the root directory of this source tree.
2391
2443
  */
2392
- const __iconNode$5 = [
2444
+ const __iconNode$7 = [
2393
2445
  ["path", { d: "M18 8L22 12L18 16", key: "1r0oui" }],
2394
2446
  ["path", { d: "M2 12H22", key: "1m8cig" }]
2395
2447
  ];
2396
- const MoveRight = createLucideIcon("move-right", __iconNode$5);
2448
+ const MoveRight = createLucideIcon("move-right", __iconNode$7);
2397
2449
  /**
2398
2450
  * @license lucide-react v0.552.0 - ISC
2399
2451
  *
2400
2452
  * This source code is licensed under the ISC license.
2401
2453
  * See the LICENSE file in the root directory of this source tree.
2402
2454
  */
2403
- const __iconNode$4 = [
2455
+ const __iconNode$6 = [
2404
2456
  [
2405
2457
  "path",
2406
2458
  {
@@ -2412,14 +2464,14 @@ const __iconNode$4 = [
2412
2464
  ["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
2413
2465
  ["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
2414
2466
  ];
2415
- const Package = createLucideIcon("package", __iconNode$4);
2467
+ const Package = createLucideIcon("package", __iconNode$6);
2416
2468
  /**
2417
2469
  * @license lucide-react v0.552.0 - ISC
2418
2470
  *
2419
2471
  * This source code is licensed under the ISC license.
2420
2472
  * See the LICENSE file in the root directory of this source tree.
2421
2473
  */
2422
- const __iconNode$3 = [
2474
+ const __iconNode$5 = [
2423
2475
  [
2424
2476
  "path",
2425
2477
  {
@@ -2428,42 +2480,74 @@ const __iconNode$3 = [
2428
2480
  }
2429
2481
  ]
2430
2482
  ];
2431
- const Play = createLucideIcon("play", __iconNode$3);
2483
+ const Play = createLucideIcon("play", __iconNode$5);
2432
2484
  /**
2433
2485
  * @license lucide-react v0.552.0 - ISC
2434
2486
  *
2435
2487
  * This source code is licensed under the ISC license.
2436
2488
  * See the LICENSE file in the root directory of this source tree.
2437
2489
  */
2438
- const __iconNode$2 = [
2490
+ const __iconNode$4 = [
2439
2491
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
2440
2492
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
2441
2493
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
2442
2494
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
2443
2495
  ];
2444
- const RefreshCw = createLucideIcon("refresh-cw", __iconNode$2);
2496
+ const RefreshCw = createLucideIcon("refresh-cw", __iconNode$4);
2445
2497
  /**
2446
2498
  * @license lucide-react v0.552.0 - ISC
2447
2499
  *
2448
2500
  * This source code is licensed under the ISC license.
2449
2501
  * See the LICENSE file in the root directory of this source tree.
2450
2502
  */
2451
- const __iconNode$1 = [
2503
+ const __iconNode$3 = [
2452
2504
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
2453
2505
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
2454
2506
  ];
2455
- const Search = createLucideIcon("search", __iconNode$1);
2507
+ const Search = createLucideIcon("search", __iconNode$3);
2456
2508
  /**
2457
2509
  * @license lucide-react v0.552.0 - ISC
2458
2510
  *
2459
2511
  * This source code is licensed under the ISC license.
2460
2512
  * See the LICENSE file in the root directory of this source tree.
2461
2513
  */
2462
- const __iconNode = [
2514
+ const __iconNode$2 = [
2515
+ [
2516
+ "path",
2517
+ {
2518
+ d: "M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.106-3.105c.32-.322.863-.22.983.218a6 6 0 0 1-8.259 7.057l-7.91 7.91a1 1 0 0 1-2.999-3l7.91-7.91a6 6 0 0 1 7.057-8.259c.438.12.54.662.219.984z",
2519
+ key: "1ngwbx"
2520
+ }
2521
+ ]
2522
+ ];
2523
+ const Wrench = createLucideIcon("wrench", __iconNode$2);
2524
+ /**
2525
+ * @license lucide-react v0.552.0 - ISC
2526
+ *
2527
+ * This source code is licensed under the ISC license.
2528
+ * See the LICENSE file in the root directory of this source tree.
2529
+ */
2530
+ const __iconNode$1 = [
2463
2531
  ["path", { d: "M18 6 6 18", key: "1bl5f8" }],
2464
2532
  ["path", { d: "m6 6 12 12", key: "d8bk6v" }]
2465
2533
  ];
2466
- const X = createLucideIcon("x", __iconNode);
2534
+ const X = createLucideIcon("x", __iconNode$1);
2535
+ /**
2536
+ * @license lucide-react v0.552.0 - ISC
2537
+ *
2538
+ * This source code is licensed under the ISC license.
2539
+ * See the LICENSE file in the root directory of this source tree.
2540
+ */
2541
+ const __iconNode = [
2542
+ [
2543
+ "path",
2544
+ {
2545
+ d: "M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",
2546
+ key: "1xq2db"
2547
+ }
2548
+ ]
2549
+ ];
2550
+ const Zap = createLucideIcon("zap", __iconNode);
2467
2551
  const determineSkillSource = (path2) => {
2468
2552
  if (path2.includes(".agent/skills/")) {
2469
2553
  return { source: "project-universal", priority: 1 };
@@ -2474,11 +2558,31 @@ const determineSkillSource = (path2) => {
2474
2558
  }
2475
2559
  };
2476
2560
  const findSkillFiles = (fileTree) => {
2477
- const skillFiles = fileTree.allFiles.filter((file) => file.name === "SKILL.md");
2561
+ const skillFiles = fileTree.allFiles.filter((file) => {
2562
+ const path2 = file.relativePath;
2563
+ const isMarkdown = file.name.endsWith(".md");
2564
+ const isInSkillDir = path2.includes(".agent/skills/") || path2.includes(".claude/skills/");
2565
+ const isMetadata = file.name === ".metadata.json" || file.name.startsWith(".");
2566
+ return isMarkdown && isInSkillDir && !isMetadata;
2567
+ });
2478
2568
  return skillFiles.map((file) => file.relativePath);
2479
2569
  };
2480
2570
  const analyzeSkillStructure = (fileTree, skillPath) => {
2481
2571
  const skillDir = skillPath.substring(0, skillPath.lastIndexOf("/"));
2572
+ const pathParts = skillPath.split("/");
2573
+ const parentDir = pathParts[pathParts.length - 2];
2574
+ const isStandaloneFile = parentDir === "skills";
2575
+ if (isStandaloneFile) {
2576
+ return {
2577
+ skillFolderPath: skillDir,
2578
+ hasScripts: false,
2579
+ hasReferences: false,
2580
+ hasAssets: false,
2581
+ scriptFiles: [],
2582
+ referenceFiles: [],
2583
+ assetFiles: []
2584
+ };
2585
+ }
2482
2586
  const skillFiles = fileTree.allFiles.filter(
2483
2587
  (file) => file.relativePath.startsWith(`${skillDir}/`)
2484
2588
  );
@@ -2497,7 +2601,10 @@ const analyzeSkillStructure = (fileTree, skillPath) => {
2497
2601
  };
2498
2602
  const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter) => {
2499
2603
  const pathParts = path2.split("/");
2500
- const skillDirName = pathParts[pathParts.length - 2] || "Unknown Skill";
2604
+ const fileName = pathParts[pathParts.length - 1];
2605
+ const parentDir = pathParts[pathParts.length - 2];
2606
+ const isDirectlyInSkillsDir = parentDir === "skills";
2607
+ const skillDirName = isDirectlyInSkillsDir ? fileName.replace(/\.md$/, "") : parentDir;
2501
2608
  let description = "";
2502
2609
  const lines = content2.split("\n");
2503
2610
  let foundHeading = false;
@@ -2548,36 +2655,24 @@ const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter) =
2548
2655
  const useSkillsData = ({
2549
2656
  context
2550
2657
  }) => {
2658
+ var _a, _b, _c;
2551
2659
  const [skills, setSkills] = useState([]);
2552
2660
  const [isLoading, setIsLoading] = useState(true);
2553
2661
  const [error, setError] = useState(null);
2662
+ const fileTreeSlice = context.getSlice("fileTree");
2663
+ const fileTree = fileTreeSlice == null ? void 0 : fileTreeSlice.data;
2664
+ const fileTreeSha = fileTree == null ? void 0 : fileTree.sha;
2665
+ const globalSkillsSlice = context.getSlice("globalSkills");
2666
+ const globalSkills = ((_a = globalSkillsSlice == null ? void 0 : globalSkillsSlice.data) == null ? void 0 : _a.skills) || [];
2667
+ const repoPath = (_b = context.currentScope.repository) == null ? void 0 : _b.path;
2668
+ const fileSystem = (_c = context.adapters) == null ? void 0 : _c.fileSystem;
2554
2669
  const loadSkills = useCallback(async () => {
2555
- var _a, _b, _c;
2556
2670
  setIsLoading(true);
2557
2671
  setError(null);
2558
2672
  try {
2559
- const fileTreeSlice = context.getSlice("fileTree");
2560
- const fileTree = fileTreeSlice == null ? void 0 : fileTreeSlice.data;
2561
2673
  let localSkills = [];
2562
- if (fileTree) {
2563
- console.log("[useSkillsData] Full context:", context);
2564
- const fileSystem = (_a = context.adapters) == null ? void 0 : _a.fileSystem;
2565
- console.log("[useSkillsData] Adapters:", context.adapters);
2566
- console.log("[useSkillsData] FileSystem adapter:", fileSystem);
2567
- console.log("[useSkillsData] fileSystem?.readFile:", fileSystem == null ? void 0 : fileSystem.readFile);
2568
- console.log("[useSkillsData] typeof fileSystem?.readFile:", typeof (fileSystem == null ? void 0 : fileSystem.readFile));
2569
- console.log("[useSkillsData] Check result (!fileSystem?.readFile):", !(fileSystem == null ? void 0 : fileSystem.readFile));
2570
- if (!(fileSystem == null ? void 0 : fileSystem.readFile)) {
2571
- console.error("[useSkillsData] FAILING CHECK - fileSystem:", fileSystem);
2572
- throw new Error("File system adapter not available");
2573
- }
2574
- console.log("[useSkillsData] Check passed! Continuing...");
2575
- const repoPath = (_b = context.currentScope.repository) == null ? void 0 : _b.path;
2576
- if (!repoPath) {
2577
- throw new Error("Repository path not available");
2578
- }
2674
+ if (fileTree && (fileSystem == null ? void 0 : fileSystem.readFile) && repoPath) {
2579
2675
  console.log("[useSkillsData] fileTree:", fileTree);
2580
- console.log("[useSkillsData] fileTree.allFiles:", fileTree.allFiles);
2581
2676
  console.log("[useSkillsData] typeof fileTree:", typeof fileTree);
2582
2677
  console.log("[useSkillsData] fileTree keys:", Object.keys(fileTree));
2583
2678
  const skillPaths = findSkillFiles(fileTree);
@@ -2596,8 +2691,6 @@ const useSkillsData = ({
2596
2691
  (skill) => skill !== null
2597
2692
  );
2598
2693
  }
2599
- const globalSkillsSlice = context.getSlice("globalSkills");
2600
- const globalSkills = ((_c = globalSkillsSlice == null ? void 0 : globalSkillsSlice.data) == null ? void 0 : _c.skills) || [];
2601
2694
  console.log("[useSkillsData] Global skills:", globalSkills);
2602
2695
  const allSkills = [...localSkills, ...globalSkills];
2603
2696
  console.log("[useSkillsData] Total skills:", allSkills.length);
@@ -2609,7 +2702,7 @@ const useSkillsData = ({
2609
2702
  } finally {
2610
2703
  setIsLoading(false);
2611
2704
  }
2612
- }, [context]);
2705
+ }, [fileTree, fileTreeSha, globalSkills, repoPath, fileSystem]);
2613
2706
  const refreshSkills = useCallback(async () => {
2614
2707
  await loadSkills();
2615
2708
  }, [loadSkills]);
@@ -47987,55 +48080,1679 @@ const SkillDetailPanel = ({
47987
48080
  }
47988
48081
  );
47989
48082
  };
47990
- const panels = [
47991
- {
47992
- metadata: {
47993
- id: "industry-theme.skills-list",
47994
- name: "Skills List",
47995
- icon: "⚡",
47996
- version: "0.1.0",
47997
- author: "Principal ADE",
47998
- description: "Display and manage Agent Skills from SKILL.md files",
47999
- slices: ["fileTree", "globalSkills"]
48000
- // Data slices this panel depends on
48001
- },
48002
- component: SkillsListPanel,
48003
- // Optional: Called when this specific panel is mounted
48004
- onMount: async (context) => {
48005
- var _a;
48006
- console.log(
48007
- "Skills List Panel mounted",
48008
- (_a = context.currentScope.repository) == null ? void 0 : _a.path
48009
- );
48010
- },
48011
- // Optional: Called when this specific panel is unmounted
48012
- onUnmount: async (_context) => {
48013
- console.log("Skills List Panel unmounting");
48083
+ const determineAgentSource = (path2) => {
48084
+ if (path2 === "AGENTS.md") {
48085
+ return { source: "project-root", priority: 1 };
48086
+ }
48087
+ return { source: "project-nested", priority: 2 };
48088
+ };
48089
+ const findAgentFiles = (fileTree) => {
48090
+ const agentFiles = fileTree.allFiles.filter((file) => {
48091
+ const fileName = file.name.toUpperCase();
48092
+ return fileName === "AGENTS.MD";
48093
+ });
48094
+ return agentFiles.map((file) => file.relativePath);
48095
+ };
48096
+ const extractSections = (content2) => {
48097
+ const sections = {};
48098
+ const lines = content2.split("\n");
48099
+ let currentSection = null;
48100
+ let currentContent = [];
48101
+ const sectionPatterns = {
48102
+ setup: /^#+ (setup|installation|getting started)/i,
48103
+ build: /^#+ (build|building|compilation)/i,
48104
+ test: /^#+ (test|testing|tests|qa)/i,
48105
+ style: /^#+ (style|code style|conventions|guidelines)/i
48106
+ };
48107
+ for (const line of lines) {
48108
+ let matchedSection = null;
48109
+ for (const [key, pattern] of Object.entries(sectionPatterns)) {
48110
+ if (pattern.test(line)) {
48111
+ matchedSection = key;
48112
+ break;
48113
+ }
48014
48114
  }
48015
- },
48016
- {
48017
- metadata: {
48018
- id: "industry-theme.skill-detail",
48019
- name: "Skill Detail",
48020
- icon: "📋",
48021
- version: "0.1.0",
48022
- author: "Principal ADE",
48023
- description: "Display detailed information about a selected Agent Skill",
48024
- slices: ["fileTree", "globalSkills"]
48025
- // Data slices this panel depends on
48026
- },
48027
- component: SkillDetailPanel,
48028
- // Optional: Called when this specific panel is mounted
48029
- onMount: async (context) => {
48030
- var _a;
48031
- console.log(
48032
- "Skill Detail Panel mounted",
48033
- (_a = context.currentScope.repository) == null ? void 0 : _a.path
48034
- );
48035
- },
48036
- // Optional: Called when this specific panel is unmounted
48037
- onUnmount: async (_context) => {
48038
- console.log("Skill Detail Panel unmounting");
48115
+ if (matchedSection) {
48116
+ if (currentSection && currentContent.length > 0) {
48117
+ sections[currentSection] = currentContent.join("\n").trim().substring(0, 200);
48118
+ }
48119
+ currentSection = matchedSection;
48120
+ currentContent = [];
48121
+ } else if (currentSection && line.trim()) {
48122
+ currentContent.push(line);
48123
+ }
48124
+ }
48125
+ if (currentSection && currentContent.length > 0) {
48126
+ sections[currentSection] = currentContent.join("\n").trim().substring(0, 200);
48127
+ }
48128
+ return sections;
48129
+ };
48130
+ const parseAgentContent = (content2, path2) => {
48131
+ const pathParts = path2.split("/");
48132
+ const isRoot = path2 === "AGENTS.md";
48133
+ const name2 = isRoot ? "Project Agents" : pathParts[pathParts.length - 2] || "Agents";
48134
+ const { source: source2, priority } = determineAgentSource(path2);
48135
+ const sections = extractSections(content2);
48136
+ return {
48137
+ id: path2,
48138
+ name: name2,
48139
+ path: path2,
48140
+ content: content2,
48141
+ source: source2,
48142
+ priority,
48143
+ sections
48144
+ };
48145
+ };
48146
+ const useAgentsData = ({
48147
+ context
48148
+ }) => {
48149
+ var _a, _b, _c;
48150
+ const [agents, setAgents] = useState([]);
48151
+ const [isLoading, setIsLoading] = useState(true);
48152
+ const [error, setError] = useState(null);
48153
+ const fileTreeSlice = context.getSlice("fileTree");
48154
+ const fileTree = fileTreeSlice == null ? void 0 : fileTreeSlice.data;
48155
+ const fileTreeSha = fileTree == null ? void 0 : fileTree.sha;
48156
+ const globalAgentsSlice = context.getSlice("globalAgents");
48157
+ const globalAgents = ((_a = globalAgentsSlice == null ? void 0 : globalAgentsSlice.data) == null ? void 0 : _a.agents) || [];
48158
+ const repoPath = (_b = context.currentScope.repository) == null ? void 0 : _b.path;
48159
+ const fileSystem = (_c = context.adapters) == null ? void 0 : _c.fileSystem;
48160
+ const loadAgents = useCallback(async () => {
48161
+ setIsLoading(true);
48162
+ setError(null);
48163
+ try {
48164
+ let localAgents = [];
48165
+ if (fileTree && (fileSystem == null ? void 0 : fileSystem.readFile) && repoPath) {
48166
+ console.log("[useAgentsData] Searching for AGENTS.md files in fileTree");
48167
+ const agentPaths = findAgentFiles(fileTree);
48168
+ console.log("[useAgentsData] Found agent paths:", agentPaths);
48169
+ const agentPromises = agentPaths.map(async (agentPath) => {
48170
+ try {
48171
+ const fullPath = `${repoPath}/${agentPath}`;
48172
+ const content2 = await fileSystem.readFile(fullPath);
48173
+ return parseAgentContent(content2, agentPath);
48174
+ } catch (err) {
48175
+ console.error(`Failed to read agent at ${agentPath}:`, err);
48176
+ return null;
48177
+ }
48178
+ });
48179
+ localAgents = (await Promise.all(agentPromises)).filter(
48180
+ (agent) => agent !== null
48181
+ );
48182
+ }
48183
+ console.log("[useAgentsData] Global agents:", globalAgents);
48184
+ const allAgents = [...localAgents, ...globalAgents];
48185
+ console.log("[useAgentsData] Total agents:", allAgents.length);
48186
+ setAgents(allAgents);
48187
+ } catch (err) {
48188
+ const errorMessage = err instanceof Error ? err.message : "Failed to load agents";
48189
+ setError(errorMessage);
48190
+ console.error("Error loading agents:", err);
48191
+ } finally {
48192
+ setIsLoading(false);
48193
+ }
48194
+ }, [fileTree, fileTreeSha, globalAgents, repoPath, fileSystem]);
48195
+ const refreshAgents = useCallback(async () => {
48196
+ await loadAgents();
48197
+ }, [loadAgents]);
48198
+ useEffect(() => {
48199
+ loadAgents();
48200
+ }, [loadAgents]);
48201
+ return {
48202
+ agents,
48203
+ isLoading,
48204
+ error,
48205
+ refreshAgents
48206
+ };
48207
+ };
48208
+ const determineSubagentSource = (path2) => {
48209
+ if (path2.includes(".claude/agents/")) {
48210
+ return { source: "project-claude", priority: 1 };
48211
+ }
48212
+ return { source: "global-claude", priority: 2 };
48213
+ };
48214
+ const findSubagentFiles = (fileTree) => {
48215
+ const subagentFiles = fileTree.allFiles.filter((file) => {
48216
+ const path2 = file.relativePath;
48217
+ const isMarkdown = file.name.endsWith(".md");
48218
+ const isInAgentsDir = path2.startsWith(".claude/agents/");
48219
+ return isMarkdown && isInAgentsDir;
48220
+ });
48221
+ return subagentFiles.map((file) => file.relativePath);
48222
+ };
48223
+ const parseFrontmatter = (content2) => {
48224
+ if (!content2.trim().startsWith("---")) {
48225
+ throw new Error("No frontmatter found - subagent must have YAML frontmatter");
48226
+ }
48227
+ const lines = content2.split("\n");
48228
+ let frontmatterEnd = -1;
48229
+ for (let i = 1; i < lines.length; i++) {
48230
+ if (lines[i].trim() === "---") {
48231
+ frontmatterEnd = i;
48232
+ break;
48233
+ }
48234
+ }
48235
+ if (frontmatterEnd === -1) {
48236
+ throw new Error("Malformed frontmatter - missing closing ---");
48237
+ }
48238
+ const frontmatterLines = lines.slice(1, frontmatterEnd);
48239
+ const body = lines.slice(frontmatterEnd + 1).join("\n").trim();
48240
+ const frontmatter = {};
48241
+ for (const line of frontmatterLines) {
48242
+ const trimmedLine = line.trim();
48243
+ if (!trimmedLine || trimmedLine.startsWith("#")) continue;
48244
+ const colonIndex = trimmedLine.indexOf(":");
48245
+ if (colonIndex === -1) continue;
48246
+ const key = trimmedLine.substring(0, colonIndex).trim();
48247
+ const value = trimmedLine.substring(colonIndex + 1).trim();
48248
+ const cleanValue = value.replace(/^["']|["']$/g, "");
48249
+ frontmatter[key] = cleanValue;
48250
+ }
48251
+ if (!frontmatter.name || !frontmatter.description) {
48252
+ throw new Error('Subagent frontmatter must have "name" and "description" fields');
48253
+ }
48254
+ return {
48255
+ frontmatter,
48256
+ body
48257
+ };
48258
+ };
48259
+ const parseSubagentContent = (content2, path2) => {
48260
+ try {
48261
+ const { frontmatter, body } = parseFrontmatter(content2);
48262
+ const { source: source2, priority } = determineSubagentSource(path2);
48263
+ return {
48264
+ id: path2,
48265
+ name: frontmatter.name,
48266
+ path: path2,
48267
+ content: content2,
48268
+ prompt: body,
48269
+ frontmatter,
48270
+ source: source2,
48271
+ priority
48272
+ };
48273
+ } catch (err) {
48274
+ console.error(`Failed to parse subagent at ${path2}:`, err);
48275
+ throw err;
48276
+ }
48277
+ };
48278
+ const useSubagentsData = ({
48279
+ context
48280
+ }) => {
48281
+ var _a, _b, _c;
48282
+ const [subagents, setSubagents] = useState([]);
48283
+ const [isLoading, setIsLoading] = useState(true);
48284
+ const [error, setError] = useState(null);
48285
+ const fileTreeSlice = context.getSlice("fileTree");
48286
+ const fileTree = fileTreeSlice == null ? void 0 : fileTreeSlice.data;
48287
+ const fileTreeSha = fileTree == null ? void 0 : fileTree.sha;
48288
+ const globalSubagentsSlice = context.getSlice("globalSubagents");
48289
+ const globalSubagents = ((_a = globalSubagentsSlice == null ? void 0 : globalSubagentsSlice.data) == null ? void 0 : _a.subagents) || [];
48290
+ const repoPath = (_b = context.currentScope.repository) == null ? void 0 : _b.path;
48291
+ const fileSystem = (_c = context.adapters) == null ? void 0 : _c.fileSystem;
48292
+ const loadSubagents = useCallback(async () => {
48293
+ setIsLoading(true);
48294
+ setError(null);
48295
+ try {
48296
+ let localSubagents = [];
48297
+ if (fileTree && (fileSystem == null ? void 0 : fileSystem.readFile) && repoPath) {
48298
+ console.log("[useSubagentsData] Searching for subagent files in .claude/agents/");
48299
+ const subagentPaths = findSubagentFiles(fileTree);
48300
+ console.log("[useSubagentsData] Found subagent paths:", subagentPaths);
48301
+ const subagentPromises = subagentPaths.map(async (subagentPath) => {
48302
+ try {
48303
+ const fullPath = `${repoPath}/${subagentPath}`;
48304
+ const content2 = await fileSystem.readFile(fullPath);
48305
+ return parseSubagentContent(content2, subagentPath);
48306
+ } catch (err) {
48307
+ console.error(`Failed to read subagent at ${subagentPath}:`, err);
48308
+ return null;
48309
+ }
48310
+ });
48311
+ localSubagents = (await Promise.all(subagentPromises)).filter(
48312
+ (subagent) => subagent !== null
48313
+ );
48314
+ }
48315
+ console.log("[useSubagentsData] Global subagents:", globalSubagents);
48316
+ const allSubagents = [...localSubagents, ...globalSubagents];
48317
+ console.log("[useSubagentsData] Total subagents:", allSubagents.length);
48318
+ setSubagents(allSubagents);
48319
+ } catch (err) {
48320
+ const errorMessage = err instanceof Error ? err.message : "Failed to load subagents";
48321
+ setError(errorMessage);
48322
+ console.error("Error loading subagents:", err);
48323
+ } finally {
48324
+ setIsLoading(false);
48325
+ }
48326
+ }, [fileTree, fileTreeSha, globalSubagents, repoPath, fileSystem]);
48327
+ const refreshSubagents = useCallback(async () => {
48328
+ await loadSubagents();
48329
+ }, [loadSubagents]);
48330
+ useEffect(() => {
48331
+ loadSubagents();
48332
+ }, [loadSubagents]);
48333
+ return {
48334
+ subagents,
48335
+ isLoading,
48336
+ error,
48337
+ refreshSubagents
48338
+ };
48339
+ };
48340
+ const getSourceBadge$1 = (source2) => {
48341
+ switch (source2) {
48342
+ case "project-root":
48343
+ return {
48344
+ label: "Root",
48345
+ icon: /* @__PURE__ */ jsx(FileText, { size: 12 }),
48346
+ color: "#10b981",
48347
+ bgColor: "#10b98120"
48348
+ };
48349
+ case "project-nested":
48350
+ return {
48351
+ label: "Nested",
48352
+ icon: /* @__PURE__ */ jsx(FolderTree, { size: 12 }),
48353
+ color: "#3b82f6",
48354
+ bgColor: "#3b82f620"
48355
+ };
48356
+ case "global-universal":
48357
+ return {
48358
+ label: "Global",
48359
+ icon: /* @__PURE__ */ jsx(Folder, { size: 12 }),
48360
+ color: "#8b5cf6",
48361
+ bgColor: "#8b5cf620"
48362
+ };
48363
+ }
48364
+ };
48365
+ const AgentCard = ({ agent, onClick, isSelected }) => {
48366
+ var _a;
48367
+ const { theme: theme2 } = useTheme();
48368
+ const sourceBadge = getSourceBadge$1(agent.source);
48369
+ const preview = ((_a = agent.content.split("\n").find((line) => line.trim() && !line.startsWith("#"))) == null ? void 0 : _a.substring(0, 150)) || "No description available";
48370
+ return /* @__PURE__ */ jsxs(
48371
+ "div",
48372
+ {
48373
+ onClick: () => onClick(agent),
48374
+ style: {
48375
+ padding: "16px",
48376
+ background: isSelected ? `${theme2.colors.primary}10` : theme2.colors.backgroundSecondary,
48377
+ border: `1px solid ${isSelected ? theme2.colors.primary : theme2.colors.border}`,
48378
+ borderRadius: theme2.radii[2],
48379
+ cursor: "pointer",
48380
+ transition: "all 0.2s ease",
48381
+ display: "flex",
48382
+ flexDirection: "column",
48383
+ gap: "12px"
48384
+ },
48385
+ onMouseEnter: (e) => {
48386
+ if (!isSelected) {
48387
+ e.currentTarget.style.borderColor = theme2.colors.textSecondary;
48388
+ e.currentTarget.style.transform = "translateY(-2px)";
48389
+ }
48390
+ },
48391
+ onMouseLeave: (e) => {
48392
+ if (!isSelected) {
48393
+ e.currentTarget.style.borderColor = theme2.colors.border;
48394
+ e.currentTarget.style.transform = "translateY(0)";
48395
+ }
48396
+ },
48397
+ children: [
48398
+ /* @__PURE__ */ jsxs(
48399
+ "div",
48400
+ {
48401
+ style: {
48402
+ display: "flex",
48403
+ alignItems: "flex-start",
48404
+ justifyContent: "space-between",
48405
+ gap: "8px"
48406
+ },
48407
+ children: [
48408
+ /* @__PURE__ */ jsx(
48409
+ "h3",
48410
+ {
48411
+ style: {
48412
+ margin: 0,
48413
+ fontSize: theme2.fontSizes[2],
48414
+ color: theme2.colors.text,
48415
+ fontWeight: 600,
48416
+ flex: 1
48417
+ },
48418
+ children: agent.name
48419
+ }
48420
+ ),
48421
+ /* @__PURE__ */ jsxs(
48422
+ "div",
48423
+ {
48424
+ style: {
48425
+ display: "flex",
48426
+ alignItems: "center",
48427
+ gap: "4px",
48428
+ padding: "4px 8px",
48429
+ fontSize: theme2.fontSizes[0],
48430
+ color: sourceBadge.color,
48431
+ background: sourceBadge.bgColor,
48432
+ border: `1px solid ${sourceBadge.color}40`,
48433
+ borderRadius: theme2.radii[1],
48434
+ flexShrink: 0
48435
+ },
48436
+ children: [
48437
+ sourceBadge.icon,
48438
+ /* @__PURE__ */ jsx("span", { children: sourceBadge.label })
48439
+ ]
48440
+ }
48441
+ )
48442
+ ]
48443
+ }
48444
+ ),
48445
+ /* @__PURE__ */ jsx(
48446
+ "div",
48447
+ {
48448
+ style: {
48449
+ fontSize: theme2.fontSizes[0],
48450
+ color: theme2.colors.textSecondary,
48451
+ fontFamily: theme2.fonts.monospace,
48452
+ wordBreak: "break-all"
48453
+ },
48454
+ children: agent.path
48455
+ }
48456
+ ),
48457
+ /* @__PURE__ */ jsx(
48458
+ "div",
48459
+ {
48460
+ style: {
48461
+ fontSize: theme2.fontSizes[1],
48462
+ color: theme2.colors.textSecondary,
48463
+ lineHeight: 1.5,
48464
+ overflow: "hidden",
48465
+ textOverflow: "ellipsis",
48466
+ display: "-webkit-box",
48467
+ WebkitLineClamp: 3,
48468
+ WebkitBoxOrient: "vertical"
48469
+ },
48470
+ children: preview
48471
+ }
48472
+ ),
48473
+ agent.sections && Object.keys(agent.sections).length > 0 && /* @__PURE__ */ jsx(
48474
+ "div",
48475
+ {
48476
+ style: {
48477
+ display: "flex",
48478
+ flexWrap: "wrap",
48479
+ gap: "6px",
48480
+ marginTop: "4px"
48481
+ },
48482
+ children: Object.keys(agent.sections).map((section) => /* @__PURE__ */ jsx(
48483
+ "span",
48484
+ {
48485
+ style: {
48486
+ fontSize: theme2.fontSizes[0],
48487
+ padding: "2px 8px",
48488
+ background: theme2.colors.background,
48489
+ border: `1px solid ${theme2.colors.border}`,
48490
+ borderRadius: theme2.radii[1],
48491
+ color: theme2.colors.textSecondary,
48492
+ textTransform: "capitalize"
48493
+ },
48494
+ children: section
48495
+ },
48496
+ section
48497
+ ))
48498
+ }
48499
+ )
48500
+ ]
48501
+ }
48502
+ );
48503
+ };
48504
+ const getSourceBadge = (source2) => {
48505
+ switch (source2) {
48506
+ case "project-claude":
48507
+ return {
48508
+ label: "Project",
48509
+ icon: /* @__PURE__ */ jsx(Folder, { size: 12 }),
48510
+ color: "#06b6d4",
48511
+ bgColor: "#06b6d420"
48512
+ };
48513
+ case "global-claude":
48514
+ return {
48515
+ label: "Global",
48516
+ icon: /* @__PURE__ */ jsx(Globe, { size: 12 }),
48517
+ color: "#8b5cf6",
48518
+ bgColor: "#8b5cf620"
48519
+ };
48520
+ }
48521
+ };
48522
+ const getModelColor = (model) => {
48523
+ switch (model) {
48524
+ case "opus":
48525
+ return "#f59e0b";
48526
+ case "sonnet":
48527
+ return "#10b981";
48528
+ case "haiku":
48529
+ return "#3b82f6";
48530
+ case "inherit":
48531
+ return "#6b7280";
48532
+ default:
48533
+ return "#10b981";
48534
+ }
48535
+ };
48536
+ const SubagentCard = ({ subagent, onClick, isSelected }) => {
48537
+ const { theme: theme2 } = useTheme();
48538
+ const sourceBadge = getSourceBadge(subagent.source);
48539
+ const modelColor = getModelColor(subagent.frontmatter.model);
48540
+ const hasTools = subagent.frontmatter.tools;
48541
+ const toolsArray = hasTools ? hasTools.split(",").map((t) => t.trim()) : null;
48542
+ return /* @__PURE__ */ jsxs(
48543
+ "div",
48544
+ {
48545
+ onClick: () => onClick(subagent),
48546
+ style: {
48547
+ padding: "16px",
48548
+ background: isSelected ? `${theme2.colors.primary}10` : theme2.colors.backgroundSecondary,
48549
+ border: `1px solid ${isSelected ? theme2.colors.primary : theme2.colors.border}`,
48550
+ borderRadius: theme2.radii[2],
48551
+ cursor: "pointer",
48552
+ transition: "all 0.2s ease",
48553
+ display: "flex",
48554
+ flexDirection: "column",
48555
+ gap: "12px"
48556
+ },
48557
+ onMouseEnter: (e) => {
48558
+ if (!isSelected) {
48559
+ e.currentTarget.style.borderColor = theme2.colors.textSecondary;
48560
+ e.currentTarget.style.transform = "translateY(-2px)";
48561
+ }
48562
+ },
48563
+ onMouseLeave: (e) => {
48564
+ if (!isSelected) {
48565
+ e.currentTarget.style.borderColor = theme2.colors.border;
48566
+ e.currentTarget.style.transform = "translateY(0)";
48567
+ }
48568
+ },
48569
+ children: [
48570
+ /* @__PURE__ */ jsxs(
48571
+ "div",
48572
+ {
48573
+ style: {
48574
+ display: "flex",
48575
+ alignItems: "flex-start",
48576
+ justifyContent: "space-between",
48577
+ gap: "8px"
48578
+ },
48579
+ children: [
48580
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", flex: 1 }, children: [
48581
+ /* @__PURE__ */ jsx(Bot, { size: 18, color: theme2.colors.primary }),
48582
+ /* @__PURE__ */ jsx(
48583
+ "h3",
48584
+ {
48585
+ style: {
48586
+ margin: 0,
48587
+ fontSize: theme2.fontSizes[2],
48588
+ color: theme2.colors.text,
48589
+ fontWeight: 600
48590
+ },
48591
+ children: subagent.name
48592
+ }
48593
+ )
48594
+ ] }),
48595
+ /* @__PURE__ */ jsxs(
48596
+ "div",
48597
+ {
48598
+ style: {
48599
+ display: "flex",
48600
+ alignItems: "center",
48601
+ gap: "4px",
48602
+ padding: "4px 8px",
48603
+ fontSize: theme2.fontSizes[0],
48604
+ color: sourceBadge.color,
48605
+ background: sourceBadge.bgColor,
48606
+ border: `1px solid ${sourceBadge.color}40`,
48607
+ borderRadius: theme2.radii[1],
48608
+ flexShrink: 0
48609
+ },
48610
+ children: [
48611
+ sourceBadge.icon,
48612
+ /* @__PURE__ */ jsx("span", { children: sourceBadge.label })
48613
+ ]
48614
+ }
48615
+ )
48616
+ ]
48617
+ }
48618
+ ),
48619
+ /* @__PURE__ */ jsx(
48620
+ "div",
48621
+ {
48622
+ style: {
48623
+ fontSize: theme2.fontSizes[1],
48624
+ color: theme2.colors.textSecondary,
48625
+ lineHeight: 1.5
48626
+ },
48627
+ children: subagent.frontmatter.description
48628
+ }
48629
+ ),
48630
+ /* @__PURE__ */ jsx(
48631
+ "div",
48632
+ {
48633
+ style: {
48634
+ fontSize: theme2.fontSizes[0],
48635
+ color: theme2.colors.textSecondary,
48636
+ fontFamily: theme2.fonts.monospace,
48637
+ wordBreak: "break-all",
48638
+ opacity: 0.7
48639
+ },
48640
+ children: subagent.path
48641
+ }
48642
+ ),
48643
+ /* @__PURE__ */ jsxs(
48644
+ "div",
48645
+ {
48646
+ style: {
48647
+ display: "flex",
48648
+ flexWrap: "wrap",
48649
+ gap: "6px",
48650
+ marginTop: "4px"
48651
+ },
48652
+ children: [
48653
+ subagent.frontmatter.model && /* @__PURE__ */ jsxs(
48654
+ "div",
48655
+ {
48656
+ style: {
48657
+ display: "flex",
48658
+ alignItems: "center",
48659
+ gap: "4px",
48660
+ fontSize: theme2.fontSizes[0],
48661
+ padding: "3px 8px",
48662
+ background: `${modelColor}20`,
48663
+ border: `1px solid ${modelColor}40`,
48664
+ borderRadius: theme2.radii[1],
48665
+ color: modelColor
48666
+ },
48667
+ children: [
48668
+ /* @__PURE__ */ jsx(Zap, { size: 11 }),
48669
+ /* @__PURE__ */ jsx("span", { children: subagent.frontmatter.model })
48670
+ ]
48671
+ }
48672
+ ),
48673
+ toolsArray && /* @__PURE__ */ jsxs(
48674
+ "div",
48675
+ {
48676
+ style: {
48677
+ display: "flex",
48678
+ alignItems: "center",
48679
+ gap: "4px",
48680
+ fontSize: theme2.fontSizes[0],
48681
+ padding: "3px 8px",
48682
+ background: theme2.colors.background,
48683
+ border: `1px solid ${theme2.colors.border}`,
48684
+ borderRadius: theme2.radii[1],
48685
+ color: theme2.colors.textSecondary
48686
+ },
48687
+ children: [
48688
+ /* @__PURE__ */ jsx(Wrench, { size: 11 }),
48689
+ /* @__PURE__ */ jsxs("span", { children: [
48690
+ toolsArray.length,
48691
+ " ",
48692
+ toolsArray.length === 1 ? "tool" : "tools"
48693
+ ] })
48694
+ ]
48695
+ }
48696
+ ),
48697
+ subagent.frontmatter.permissionMode && subagent.frontmatter.permissionMode !== "default" && /* @__PURE__ */ jsx(
48698
+ "div",
48699
+ {
48700
+ style: {
48701
+ fontSize: theme2.fontSizes[0],
48702
+ padding: "3px 8px",
48703
+ background: theme2.colors.background,
48704
+ border: `1px solid ${theme2.colors.border}`,
48705
+ borderRadius: theme2.radii[1],
48706
+ color: theme2.colors.textSecondary
48707
+ },
48708
+ children: subagent.frontmatter.permissionMode
48709
+ }
48710
+ )
48711
+ ]
48712
+ }
48713
+ )
48714
+ ]
48715
+ }
48716
+ );
48717
+ };
48718
+ const AgentsListPanel = ({
48719
+ context,
48720
+ events
48721
+ }) => {
48722
+ const { theme: theme2 } = useTheme();
48723
+ const panelRef = useRef(null);
48724
+ const [selectedItemId, setSelectedItemId] = useState(null);
48725
+ const [searchQuery, setSearchQuery] = useState("");
48726
+ const [agentFilter, setAgentFilter] = useState("all");
48727
+ const [isRefreshing, setIsRefreshing] = useState(false);
48728
+ const {
48729
+ agents,
48730
+ isLoading: agentsLoading,
48731
+ error: agentsError,
48732
+ refreshAgents
48733
+ } = useAgentsData({ context });
48734
+ const {
48735
+ subagents,
48736
+ isLoading: subagentsLoading,
48737
+ error: subagentsError,
48738
+ refreshSubagents
48739
+ } = useSubagentsData({ context });
48740
+ const isLoading = agentsLoading || subagentsLoading;
48741
+ const error = agentsError || subagentsError;
48742
+ gt("agents-list", events, () => {
48743
+ var _a;
48744
+ return (_a = panelRef.current) == null ? void 0 : _a.focus();
48745
+ });
48746
+ const allItems = useMemo(() => {
48747
+ const items = [];
48748
+ agents.forEach((agent) => {
48749
+ items.push({ type: "agent", data: agent });
48750
+ });
48751
+ subagents.forEach((subagent) => {
48752
+ items.push({ type: "subagent", data: subagent });
48753
+ });
48754
+ return items;
48755
+ }, [agents, subagents]);
48756
+ const filteredItems = useMemo(() => {
48757
+ let filtered = allItems;
48758
+ if (agentFilter === "documentation") {
48759
+ filtered = filtered.filter((item) => item.type === "agent");
48760
+ } else if (agentFilter === "subagents") {
48761
+ filtered = filtered.filter((item) => item.type === "subagent");
48762
+ }
48763
+ if (searchQuery.trim()) {
48764
+ const query = searchQuery.toLowerCase().trim();
48765
+ filtered = filtered.filter((item) => {
48766
+ if (item.type === "agent") {
48767
+ const agent = item.data;
48768
+ if (agent.name.toLowerCase().includes(query)) return true;
48769
+ if (agent.path.toLowerCase().includes(query)) return true;
48770
+ if (agent.content.toLowerCase().includes(query)) return true;
48771
+ return false;
48772
+ } else {
48773
+ const subagent = item.data;
48774
+ if (subagent.name.toLowerCase().includes(query)) return true;
48775
+ if (subagent.path.toLowerCase().includes(query)) return true;
48776
+ if (subagent.frontmatter.description.toLowerCase().includes(query)) return true;
48777
+ if (subagent.prompt.toLowerCase().includes(query)) return true;
48778
+ return false;
48779
+ }
48780
+ });
48781
+ }
48782
+ return filtered;
48783
+ }, [allItems, searchQuery, agentFilter]);
48784
+ const handleItemClick = (item) => {
48785
+ const itemId = item.type === "agent" ? item.data.id : item.data.id;
48786
+ setSelectedItemId(itemId);
48787
+ if (events) {
48788
+ events.emit({
48789
+ type: item.type === "agent" ? "agent:selected" : "subagent:selected",
48790
+ source: "agents-list-panel",
48791
+ timestamp: Date.now(),
48792
+ payload: {
48793
+ id: itemId,
48794
+ type: item.type,
48795
+ data: item.data
48796
+ }
48797
+ });
48798
+ }
48799
+ };
48800
+ const handleRefresh = async () => {
48801
+ setIsRefreshing(true);
48802
+ try {
48803
+ await Promise.all([refreshAgents(), refreshSubagents()]);
48804
+ } finally {
48805
+ setIsRefreshing(false);
48806
+ }
48807
+ };
48808
+ const agentsCount = agents.length;
48809
+ const subagentsCount = subagents.length;
48810
+ return /* @__PURE__ */ jsxs(
48811
+ "div",
48812
+ {
48813
+ ref: panelRef,
48814
+ tabIndex: -1,
48815
+ style: {
48816
+ padding: "clamp(12px, 3vw, 20px)",
48817
+ fontFamily: theme2.fonts.body,
48818
+ height: "100%",
48819
+ boxSizing: "border-box",
48820
+ display: "flex",
48821
+ flexDirection: "column",
48822
+ gap: "16px",
48823
+ overflow: "hidden",
48824
+ backgroundColor: theme2.colors.background,
48825
+ color: theme2.colors.text,
48826
+ outline: "none"
48827
+ },
48828
+ children: [
48829
+ /* @__PURE__ */ jsxs(
48830
+ "div",
48831
+ {
48832
+ style: {
48833
+ flexShrink: 0,
48834
+ display: "flex",
48835
+ alignItems: "center",
48836
+ justifyContent: "space-between",
48837
+ gap: "12px",
48838
+ flexWrap: "wrap"
48839
+ },
48840
+ children: [
48841
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
48842
+ /* @__PURE__ */ jsx(
48843
+ "h2",
48844
+ {
48845
+ style: {
48846
+ margin: 0,
48847
+ fontSize: theme2.fontSizes[4],
48848
+ color: theme2.colors.text
48849
+ },
48850
+ children: /* @__PURE__ */ jsx(
48851
+ "a",
48852
+ {
48853
+ href: "https://agents.md/",
48854
+ target: "_blank",
48855
+ rel: "noopener noreferrer",
48856
+ style: {
48857
+ color: "inherit",
48858
+ textDecoration: "none"
48859
+ },
48860
+ onMouseEnter: (e) => e.currentTarget.style.textDecoration = "underline",
48861
+ onMouseLeave: (e) => e.currentTarget.style.textDecoration = "none",
48862
+ children: "Agents"
48863
+ }
48864
+ )
48865
+ }
48866
+ ),
48867
+ !isLoading && /* @__PURE__ */ jsxs(
48868
+ "span",
48869
+ {
48870
+ style: {
48871
+ fontSize: theme2.fontSizes[1],
48872
+ color: theme2.colors.textSecondary,
48873
+ background: theme2.colors.backgroundSecondary,
48874
+ padding: "4px 10px",
48875
+ borderRadius: theme2.radii[1]
48876
+ },
48877
+ children: [
48878
+ filteredItems.length,
48879
+ " ",
48880
+ filteredItems.length === 1 ? "item" : "items"
48881
+ ]
48882
+ }
48883
+ )
48884
+ ] }),
48885
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px", flex: "1 1 200px", maxWidth: "400px" }, children: [
48886
+ /* @__PURE__ */ jsxs(
48887
+ "div",
48888
+ {
48889
+ style: {
48890
+ position: "relative",
48891
+ flex: 1,
48892
+ minWidth: "150px"
48893
+ },
48894
+ children: [
48895
+ /* @__PURE__ */ jsx(
48896
+ Search,
48897
+ {
48898
+ size: 16,
48899
+ color: theme2.colors.textSecondary,
48900
+ style: {
48901
+ position: "absolute",
48902
+ left: "10px",
48903
+ top: "50%",
48904
+ transform: "translateY(-50%)",
48905
+ pointerEvents: "none"
48906
+ }
48907
+ }
48908
+ ),
48909
+ /* @__PURE__ */ jsx(
48910
+ "input",
48911
+ {
48912
+ type: "text",
48913
+ placeholder: "Search agents...",
48914
+ value: searchQuery,
48915
+ onChange: (e) => setSearchQuery(e.target.value),
48916
+ style: {
48917
+ width: "100%",
48918
+ padding: "8px 32px 8px 32px",
48919
+ fontSize: theme2.fontSizes[1],
48920
+ fontFamily: theme2.fonts.body,
48921
+ border: `1px solid ${theme2.colors.border}`,
48922
+ borderRadius: theme2.radii[2],
48923
+ background: theme2.colors.backgroundSecondary,
48924
+ color: theme2.colors.text,
48925
+ outline: "none",
48926
+ boxSizing: "border-box"
48927
+ }
48928
+ }
48929
+ ),
48930
+ searchQuery && /* @__PURE__ */ jsx(
48931
+ "button",
48932
+ {
48933
+ onClick: () => setSearchQuery(""),
48934
+ style: {
48935
+ position: "absolute",
48936
+ right: "6px",
48937
+ top: "50%",
48938
+ transform: "translateY(-50%)",
48939
+ background: "transparent",
48940
+ border: "none",
48941
+ padding: "4px",
48942
+ cursor: "pointer",
48943
+ display: "flex",
48944
+ alignItems: "center",
48945
+ justifyContent: "center",
48946
+ color: theme2.colors.textSecondary
48947
+ },
48948
+ "aria-label": "Clear search",
48949
+ children: /* @__PURE__ */ jsx(X, { size: 14 })
48950
+ }
48951
+ )
48952
+ ]
48953
+ }
48954
+ ),
48955
+ /* @__PURE__ */ jsx(
48956
+ "button",
48957
+ {
48958
+ onClick: handleRefresh,
48959
+ disabled: isRefreshing || isLoading,
48960
+ style: {
48961
+ background: theme2.colors.backgroundSecondary,
48962
+ border: `1px solid ${theme2.colors.border}`,
48963
+ borderRadius: theme2.radii[1],
48964
+ padding: "8px",
48965
+ cursor: isRefreshing ? "wait" : "pointer",
48966
+ display: "flex",
48967
+ alignItems: "center",
48968
+ justifyContent: "center",
48969
+ transition: "all 0.2s ease"
48970
+ },
48971
+ title: "Refresh agents",
48972
+ children: /* @__PURE__ */ jsx(
48973
+ RefreshCw,
48974
+ {
48975
+ size: 16,
48976
+ color: theme2.colors.textSecondary,
48977
+ style: {
48978
+ animation: isRefreshing ? "spin 1s linear infinite" : "none"
48979
+ }
48980
+ }
48981
+ )
48982
+ }
48983
+ )
48984
+ ] })
48985
+ ]
48986
+ }
48987
+ ),
48988
+ /* @__PURE__ */ jsxs(
48989
+ "div",
48990
+ {
48991
+ style: {
48992
+ flexShrink: 0,
48993
+ display: "flex",
48994
+ gap: "8px"
48995
+ },
48996
+ children: [
48997
+ /* @__PURE__ */ jsxs(
48998
+ "button",
48999
+ {
49000
+ onClick: () => setAgentFilter("all"),
49001
+ style: {
49002
+ padding: "8px 16px",
49003
+ fontSize: theme2.fontSizes[1],
49004
+ fontFamily: theme2.fonts.body,
49005
+ border: `1px solid ${agentFilter === "all" ? theme2.colors.primary : theme2.colors.border}`,
49006
+ borderRadius: theme2.radii[1],
49007
+ background: agentFilter === "all" ? `${theme2.colors.primary}15` : theme2.colors.backgroundSecondary,
49008
+ color: agentFilter === "all" ? theme2.colors.primary : theme2.colors.text,
49009
+ cursor: "pointer",
49010
+ display: "flex",
49011
+ alignItems: "center",
49012
+ gap: "6px",
49013
+ fontWeight: agentFilter === "all" ? 600 : 400,
49014
+ transition: "all 0.2s ease"
49015
+ },
49016
+ children: [
49017
+ "All (",
49018
+ agentsCount + subagentsCount,
49019
+ ")"
49020
+ ]
49021
+ }
49022
+ ),
49023
+ /* @__PURE__ */ jsxs(
49024
+ "button",
49025
+ {
49026
+ onClick: () => setAgentFilter("documentation"),
49027
+ style: {
49028
+ padding: "8px 16px",
49029
+ fontSize: theme2.fontSizes[1],
49030
+ fontFamily: theme2.fonts.body,
49031
+ border: `1px solid ${agentFilter === "documentation" ? theme2.colors.primary : theme2.colors.border}`,
49032
+ borderRadius: theme2.radii[1],
49033
+ background: agentFilter === "documentation" ? `${theme2.colors.primary}15` : theme2.colors.backgroundSecondary,
49034
+ color: agentFilter === "documentation" ? theme2.colors.primary : theme2.colors.text,
49035
+ cursor: "pointer",
49036
+ display: "flex",
49037
+ alignItems: "center",
49038
+ gap: "6px",
49039
+ fontWeight: agentFilter === "documentation" ? 600 : 400,
49040
+ transition: "all 0.2s ease"
49041
+ },
49042
+ children: [
49043
+ /* @__PURE__ */ jsx(BookOpen, { size: 14 }),
49044
+ "Docs (",
49045
+ agentsCount,
49046
+ ")"
49047
+ ]
49048
+ }
49049
+ ),
49050
+ /* @__PURE__ */ jsxs(
49051
+ "button",
49052
+ {
49053
+ onClick: () => setAgentFilter("subagents"),
49054
+ style: {
49055
+ padding: "8px 16px",
49056
+ fontSize: theme2.fontSizes[1],
49057
+ fontFamily: theme2.fonts.body,
49058
+ border: `1px solid ${agentFilter === "subagents" ? theme2.colors.primary : theme2.colors.border}`,
49059
+ borderRadius: theme2.radii[1],
49060
+ background: agentFilter === "subagents" ? `${theme2.colors.primary}15` : theme2.colors.backgroundSecondary,
49061
+ color: agentFilter === "subagents" ? theme2.colors.primary : theme2.colors.text,
49062
+ cursor: "pointer",
49063
+ display: "flex",
49064
+ alignItems: "center",
49065
+ gap: "6px",
49066
+ fontWeight: agentFilter === "subagents" ? 600 : 400,
49067
+ transition: "all 0.2s ease"
49068
+ },
49069
+ children: [
49070
+ /* @__PURE__ */ jsx(Bot, { size: 14 }),
49071
+ "Subagents (",
49072
+ subagentsCount,
49073
+ ")"
49074
+ ]
49075
+ }
49076
+ )
49077
+ ]
49078
+ }
49079
+ ),
49080
+ error && /* @__PURE__ */ jsxs(
49081
+ "div",
49082
+ {
49083
+ style: {
49084
+ flexShrink: 0,
49085
+ padding: "12px",
49086
+ background: `${theme2.colors.error}20`,
49087
+ border: `1px solid ${theme2.colors.error}`,
49088
+ borderRadius: theme2.radii[2],
49089
+ display: "flex",
49090
+ alignItems: "center",
49091
+ gap: "8px",
49092
+ color: theme2.colors.error,
49093
+ fontSize: theme2.fontSizes[1]
49094
+ },
49095
+ children: [
49096
+ /* @__PURE__ */ jsx(CircleAlert, { size: 16 }),
49097
+ /* @__PURE__ */ jsx("span", { children: error })
49098
+ ]
49099
+ }
49100
+ ),
49101
+ /* @__PURE__ */ jsx(
49102
+ "div",
49103
+ {
49104
+ style: {
49105
+ flex: 1,
49106
+ overflowY: "auto",
49107
+ minHeight: 0
49108
+ },
49109
+ children: isLoading ? /* @__PURE__ */ jsx(
49110
+ "div",
49111
+ {
49112
+ style: {
49113
+ height: "100%",
49114
+ display: "flex",
49115
+ alignItems: "center",
49116
+ justifyContent: "center",
49117
+ color: theme2.colors.textSecondary,
49118
+ fontSize: theme2.fontSizes[2]
49119
+ },
49120
+ children: "Loading agents..."
49121
+ }
49122
+ ) : filteredItems.length === 0 ? /* @__PURE__ */ jsxs(
49123
+ "div",
49124
+ {
49125
+ style: {
49126
+ height: "100%",
49127
+ display: "flex",
49128
+ flexDirection: "column",
49129
+ alignItems: "center",
49130
+ justifyContent: "center",
49131
+ gap: "16px",
49132
+ color: theme2.colors.textSecondary,
49133
+ padding: "24px"
49134
+ },
49135
+ children: [
49136
+ /* @__PURE__ */ jsx(FileCode, { size: 48, color: theme2.colors.border }),
49137
+ /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
49138
+ /* @__PURE__ */ jsx("p", { style: { margin: 0, fontSize: theme2.fontSizes[2] }, children: searchQuery ? "No agents match your search" : "No agents found" }),
49139
+ /* @__PURE__ */ jsx("p", { style: { margin: "8px 0 0 0", fontSize: theme2.fontSizes[1] }, children: searchQuery ? "Try a different search term" : "Add AGENTS.md or create subagents in .claude/agents/ to get started" })
49140
+ ] })
49141
+ ]
49142
+ }
49143
+ ) : /* @__PURE__ */ jsx(
49144
+ "div",
49145
+ {
49146
+ style: {
49147
+ display: "grid",
49148
+ gridTemplateColumns: "repeat(auto-fill, minmax(300px, 1fr))",
49149
+ gap: "16px",
49150
+ padding: "4px"
49151
+ },
49152
+ children: filteredItems.map((item) => {
49153
+ if (item.type === "agent") {
49154
+ return /* @__PURE__ */ jsx(
49155
+ AgentCard,
49156
+ {
49157
+ agent: item.data,
49158
+ onClick: () => handleItemClick(item),
49159
+ isSelected: selectedItemId === item.data.id
49160
+ },
49161
+ item.data.id
49162
+ );
49163
+ } else {
49164
+ return /* @__PURE__ */ jsx(
49165
+ SubagentCard,
49166
+ {
49167
+ subagent: item.data,
49168
+ onClick: () => handleItemClick(item),
49169
+ isSelected: selectedItemId === item.data.id
49170
+ },
49171
+ item.data.id
49172
+ );
49173
+ }
49174
+ })
49175
+ }
49176
+ )
49177
+ }
49178
+ ),
49179
+ /* @__PURE__ */ jsx("style", { children: `
49180
+ @keyframes spin {
49181
+ to { transform: rotate(360deg); }
49182
+ }
49183
+ ` })
49184
+ ]
49185
+ }
49186
+ );
49187
+ };
49188
+ const AgentDetailPanel = ({
49189
+ context,
49190
+ events,
49191
+ actions
49192
+ }) => {
49193
+ const { theme: theme2 } = useTheme();
49194
+ const { isLoading: agentsLoading, error: agentsError } = useAgentsData({ context });
49195
+ const { isLoading: subagentsLoading, error: subagentsError } = useSubagentsData({ context });
49196
+ const [selectedItem, setSelectedItem] = useState(null);
49197
+ const panelRef = useRef(null);
49198
+ const isLoading = agentsLoading || subagentsLoading;
49199
+ const error = agentsError || subagentsError;
49200
+ gt("agent-detail", events, () => {
49201
+ var _a;
49202
+ return (_a = panelRef.current) == null ? void 0 : _a.focus();
49203
+ });
49204
+ useEffect(() => {
49205
+ const unsubscribeAgent = events.on("agent:selected", (event) => {
49206
+ const payload = event.payload;
49207
+ if ((payload == null ? void 0 : payload.id) && (payload == null ? void 0 : payload.data)) {
49208
+ setSelectedItem({ type: "agent", data: payload.data });
49209
+ }
49210
+ });
49211
+ const unsubscribeSubagent = events.on("subagent:selected", (event) => {
49212
+ const payload = event.payload;
49213
+ if ((payload == null ? void 0 : payload.id) && (payload == null ? void 0 : payload.data)) {
49214
+ setSelectedItem({ type: "subagent", data: payload.data });
49215
+ }
49216
+ });
49217
+ return () => {
49218
+ unsubscribeAgent();
49219
+ unsubscribeSubagent();
49220
+ };
49221
+ }, [events]);
49222
+ if (error) {
49223
+ return /* @__PURE__ */ jsx(
49224
+ "div",
49225
+ {
49226
+ style: {
49227
+ display: "flex",
49228
+ alignItems: "center",
49229
+ justifyContent: "center",
49230
+ height: "100%",
49231
+ padding: "2rem",
49232
+ backgroundColor: theme2.colors.background,
49233
+ color: theme2.colors.error,
49234
+ fontFamily: theme2.fonts.body
49235
+ },
49236
+ children: /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
49237
+ "Error loading agents: ",
49238
+ error
49239
+ ] })
49240
+ }
49241
+ );
49242
+ }
49243
+ if (isLoading) {
49244
+ return /* @__PURE__ */ jsx(
49245
+ "div",
49246
+ {
49247
+ style: {
49248
+ display: "flex",
49249
+ alignItems: "center",
49250
+ justifyContent: "center",
49251
+ height: "100%",
49252
+ backgroundColor: theme2.colors.background,
49253
+ color: theme2.colors.text,
49254
+ fontFamily: theme2.fonts.body
49255
+ },
49256
+ children: "Loading agents..."
49257
+ }
49258
+ );
49259
+ }
49260
+ if (!selectedItem) {
49261
+ return /* @__PURE__ */ jsxs(
49262
+ "div",
49263
+ {
49264
+ style: {
49265
+ display: "flex",
49266
+ flexDirection: "column",
49267
+ alignItems: "center",
49268
+ justifyContent: "center",
49269
+ height: "100%",
49270
+ gap: "1rem",
49271
+ backgroundColor: theme2.colors.background,
49272
+ color: theme2.colors.textSecondary,
49273
+ fontFamily: theme2.fonts.body,
49274
+ padding: "2rem"
49275
+ },
49276
+ children: [
49277
+ /* @__PURE__ */ jsx(BookOpen, { size: 48, color: theme2.colors.border }),
49278
+ /* @__PURE__ */ jsx("p", { style: { margin: 0, textAlign: "center" }, children: "Select an agent or subagent from the list to view details" })
49279
+ ]
49280
+ }
49281
+ );
49282
+ }
49283
+ if (selectedItem.type === "agent") {
49284
+ const agent = selectedItem.data;
49285
+ return /* @__PURE__ */ jsxs(
49286
+ "div",
49287
+ {
49288
+ ref: panelRef,
49289
+ tabIndex: -1,
49290
+ style: {
49291
+ height: "100%",
49292
+ overflow: "auto",
49293
+ backgroundColor: theme2.colors.background,
49294
+ padding: "clamp(16px, 3vw, 24px)",
49295
+ fontFamily: theme2.fonts.body,
49296
+ outline: "none"
49297
+ },
49298
+ children: [
49299
+ /* @__PURE__ */ jsxs(
49300
+ "div",
49301
+ {
49302
+ style: {
49303
+ marginBottom: "24px",
49304
+ paddingBottom: "16px",
49305
+ borderBottom: `1px solid ${theme2.colors.border}`
49306
+ },
49307
+ children: [
49308
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px", marginBottom: "8px" }, children: [
49309
+ /* @__PURE__ */ jsx(BookOpen, { size: 24, color: theme2.colors.primary }),
49310
+ /* @__PURE__ */ jsx(
49311
+ "h1",
49312
+ {
49313
+ style: {
49314
+ margin: 0,
49315
+ fontSize: theme2.fontSizes[5],
49316
+ color: theme2.colors.text,
49317
+ fontWeight: 600
49318
+ },
49319
+ children: agent.name
49320
+ }
49321
+ )
49322
+ ] }),
49323
+ /* @__PURE__ */ jsx(
49324
+ "div",
49325
+ {
49326
+ style: {
49327
+ fontSize: theme2.fontSizes[1],
49328
+ color: theme2.colors.textSecondary,
49329
+ fontFamily: theme2.fonts.monospace
49330
+ },
49331
+ children: agent.path
49332
+ }
49333
+ )
49334
+ ]
49335
+ }
49336
+ ),
49337
+ /* @__PURE__ */ jsx(
49338
+ "div",
49339
+ {
49340
+ style: {
49341
+ color: theme2.colors.text
49342
+ },
49343
+ children: /* @__PURE__ */ jsx(SkillMarkdown, { content: agent.content, theme: theme2 })
49344
+ }
49345
+ )
49346
+ ]
49347
+ }
49348
+ );
49349
+ }
49350
+ if (selectedItem.type === "subagent") {
49351
+ const subagent = selectedItem.data;
49352
+ const fm = subagent.frontmatter;
49353
+ return /* @__PURE__ */ jsxs(
49354
+ "div",
49355
+ {
49356
+ ref: panelRef,
49357
+ tabIndex: -1,
49358
+ style: {
49359
+ height: "100%",
49360
+ overflow: "auto",
49361
+ backgroundColor: theme2.colors.background,
49362
+ padding: "clamp(16px, 3vw, 24px)",
49363
+ fontFamily: theme2.fonts.body,
49364
+ outline: "none"
49365
+ },
49366
+ children: [
49367
+ /* @__PURE__ */ jsxs(
49368
+ "div",
49369
+ {
49370
+ style: {
49371
+ marginBottom: "24px",
49372
+ paddingBottom: "16px",
49373
+ borderBottom: `1px solid ${theme2.colors.border}`
49374
+ },
49375
+ children: [
49376
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px", marginBottom: "8px" }, children: [
49377
+ /* @__PURE__ */ jsx(Bot, { size: 24, color: theme2.colors.primary }),
49378
+ /* @__PURE__ */ jsx(
49379
+ "h1",
49380
+ {
49381
+ style: {
49382
+ margin: 0,
49383
+ fontSize: theme2.fontSizes[5],
49384
+ color: theme2.colors.text,
49385
+ fontWeight: 600
49386
+ },
49387
+ children: subagent.name
49388
+ }
49389
+ )
49390
+ ] }),
49391
+ /* @__PURE__ */ jsx(
49392
+ "div",
49393
+ {
49394
+ style: {
49395
+ fontSize: theme2.fontSizes[1],
49396
+ color: theme2.colors.textSecondary,
49397
+ fontFamily: theme2.fonts.monospace,
49398
+ marginBottom: "12px"
49399
+ },
49400
+ children: subagent.path
49401
+ }
49402
+ ),
49403
+ /* @__PURE__ */ jsx(
49404
+ "p",
49405
+ {
49406
+ style: {
49407
+ margin: "12px 0 16px 0",
49408
+ fontSize: theme2.fontSizes[2],
49409
+ color: theme2.colors.text,
49410
+ lineHeight: 1.6
49411
+ },
49412
+ children: fm.description
49413
+ }
49414
+ ),
49415
+ /* @__PURE__ */ jsxs(
49416
+ "div",
49417
+ {
49418
+ style: {
49419
+ display: "grid",
49420
+ gridTemplateColumns: "repeat(auto-fit, minmax(200px, 1fr))",
49421
+ gap: "12px",
49422
+ marginTop: "16px"
49423
+ },
49424
+ children: [
49425
+ fm.model && /* @__PURE__ */ jsxs(
49426
+ "div",
49427
+ {
49428
+ style: {
49429
+ padding: "12px",
49430
+ background: theme2.colors.backgroundSecondary,
49431
+ border: `1px solid ${theme2.colors.border}`,
49432
+ borderRadius: theme2.radii[2]
49433
+ },
49434
+ children: [
49435
+ /* @__PURE__ */ jsxs(
49436
+ "div",
49437
+ {
49438
+ style: {
49439
+ display: "flex",
49440
+ alignItems: "center",
49441
+ gap: "6px",
49442
+ marginBottom: "4px",
49443
+ color: theme2.colors.textSecondary,
49444
+ fontSize: theme2.fontSizes[0]
49445
+ },
49446
+ children: [
49447
+ /* @__PURE__ */ jsx(Zap, { size: 14 }),
49448
+ /* @__PURE__ */ jsx("span", { children: "Model" })
49449
+ ]
49450
+ }
49451
+ ),
49452
+ /* @__PURE__ */ jsx(
49453
+ "div",
49454
+ {
49455
+ style: {
49456
+ fontSize: theme2.fontSizes[1],
49457
+ color: theme2.colors.text,
49458
+ fontFamily: theme2.fonts.monospace
49459
+ },
49460
+ children: fm.model
49461
+ }
49462
+ )
49463
+ ]
49464
+ }
49465
+ ),
49466
+ fm.tools && /* @__PURE__ */ jsxs(
49467
+ "div",
49468
+ {
49469
+ style: {
49470
+ padding: "12px",
49471
+ background: theme2.colors.backgroundSecondary,
49472
+ border: `1px solid ${theme2.colors.border}`,
49473
+ borderRadius: theme2.radii[2]
49474
+ },
49475
+ children: [
49476
+ /* @__PURE__ */ jsxs(
49477
+ "div",
49478
+ {
49479
+ style: {
49480
+ display: "flex",
49481
+ alignItems: "center",
49482
+ gap: "6px",
49483
+ marginBottom: "4px",
49484
+ color: theme2.colors.textSecondary,
49485
+ fontSize: theme2.fontSizes[0]
49486
+ },
49487
+ children: [
49488
+ /* @__PURE__ */ jsx(Wrench, { size: 14 }),
49489
+ /* @__PURE__ */ jsx("span", { children: "Tools" })
49490
+ ]
49491
+ }
49492
+ ),
49493
+ /* @__PURE__ */ jsx(
49494
+ "div",
49495
+ {
49496
+ style: {
49497
+ fontSize: theme2.fontSizes[1],
49498
+ color: theme2.colors.text,
49499
+ fontFamily: theme2.fonts.monospace
49500
+ },
49501
+ children: fm.tools
49502
+ }
49503
+ )
49504
+ ]
49505
+ }
49506
+ ),
49507
+ fm.permissionMode && fm.permissionMode !== "default" && /* @__PURE__ */ jsxs(
49508
+ "div",
49509
+ {
49510
+ style: {
49511
+ padding: "12px",
49512
+ background: theme2.colors.backgroundSecondary,
49513
+ border: `1px solid ${theme2.colors.border}`,
49514
+ borderRadius: theme2.radii[2]
49515
+ },
49516
+ children: [
49517
+ /* @__PURE__ */ jsxs(
49518
+ "div",
49519
+ {
49520
+ style: {
49521
+ display: "flex",
49522
+ alignItems: "center",
49523
+ gap: "6px",
49524
+ marginBottom: "4px",
49525
+ color: theme2.colors.textSecondary,
49526
+ fontSize: theme2.fontSizes[0]
49527
+ },
49528
+ children: [
49529
+ /* @__PURE__ */ jsx(FileText, { size: 14 }),
49530
+ /* @__PURE__ */ jsx("span", { children: "Permission Mode" })
49531
+ ]
49532
+ }
49533
+ ),
49534
+ /* @__PURE__ */ jsx(
49535
+ "div",
49536
+ {
49537
+ style: {
49538
+ fontSize: theme2.fontSizes[1],
49539
+ color: theme2.colors.text,
49540
+ fontFamily: theme2.fonts.monospace
49541
+ },
49542
+ children: fm.permissionMode
49543
+ }
49544
+ )
49545
+ ]
49546
+ }
49547
+ ),
49548
+ fm.skills && /* @__PURE__ */ jsxs(
49549
+ "div",
49550
+ {
49551
+ style: {
49552
+ padding: "12px",
49553
+ background: theme2.colors.backgroundSecondary,
49554
+ border: `1px solid ${theme2.colors.border}`,
49555
+ borderRadius: theme2.radii[2]
49556
+ },
49557
+ children: [
49558
+ /* @__PURE__ */ jsxs(
49559
+ "div",
49560
+ {
49561
+ style: {
49562
+ display: "flex",
49563
+ alignItems: "center",
49564
+ gap: "6px",
49565
+ marginBottom: "4px",
49566
+ color: theme2.colors.textSecondary,
49567
+ fontSize: theme2.fontSizes[0]
49568
+ },
49569
+ children: [
49570
+ /* @__PURE__ */ jsx(CodeXml, { size: 14 }),
49571
+ /* @__PURE__ */ jsx("span", { children: "Skills" })
49572
+ ]
49573
+ }
49574
+ ),
49575
+ /* @__PURE__ */ jsx(
49576
+ "div",
49577
+ {
49578
+ style: {
49579
+ fontSize: theme2.fontSizes[1],
49580
+ color: theme2.colors.text,
49581
+ fontFamily: theme2.fonts.monospace
49582
+ },
49583
+ children: fm.skills
49584
+ }
49585
+ )
49586
+ ]
49587
+ }
49588
+ )
49589
+ ]
49590
+ }
49591
+ )
49592
+ ]
49593
+ }
49594
+ ),
49595
+ /* @__PURE__ */ jsxs("div", { style: { marginTop: "32px" }, children: [
49596
+ /* @__PURE__ */ jsx(
49597
+ "h2",
49598
+ {
49599
+ style: {
49600
+ margin: "0 0 16px 0",
49601
+ fontSize: theme2.fontSizes[3],
49602
+ color: theme2.colors.text,
49603
+ fontWeight: 600
49604
+ },
49605
+ children: "Prompt"
49606
+ }
49607
+ ),
49608
+ /* @__PURE__ */ jsx(
49609
+ "div",
49610
+ {
49611
+ style: {
49612
+ padding: "16px",
49613
+ background: theme2.colors.backgroundSecondary,
49614
+ border: `1px solid ${theme2.colors.border}`,
49615
+ borderRadius: theme2.radii[2],
49616
+ color: theme2.colors.text
49617
+ },
49618
+ children: /* @__PURE__ */ jsx(SkillMarkdown, { content: subagent.prompt, theme: theme2 })
49619
+ }
49620
+ )
49621
+ ] }),
49622
+ fm.disallowedTools && /* @__PURE__ */ jsxs("div", { style: { marginTop: "24px" }, children: [
49623
+ /* @__PURE__ */ jsx(
49624
+ "h3",
49625
+ {
49626
+ style: {
49627
+ margin: "0 0 12px 0",
49628
+ fontSize: theme2.fontSizes[2],
49629
+ color: theme2.colors.text,
49630
+ fontWeight: 600
49631
+ },
49632
+ children: "Disallowed Tools"
49633
+ }
49634
+ ),
49635
+ /* @__PURE__ */ jsx(
49636
+ "div",
49637
+ {
49638
+ style: {
49639
+ padding: "12px",
49640
+ background: `${theme2.colors.error}10`,
49641
+ border: `1px solid ${theme2.colors.error}40`,
49642
+ borderRadius: theme2.radii[2],
49643
+ color: theme2.colors.text,
49644
+ fontFamily: theme2.fonts.monospace,
49645
+ fontSize: theme2.fontSizes[1]
49646
+ },
49647
+ children: fm.disallowedTools
49648
+ }
49649
+ )
49650
+ ] })
49651
+ ]
49652
+ }
49653
+ );
49654
+ }
49655
+ return null;
49656
+ };
49657
+ const panels = [
49658
+ {
49659
+ metadata: {
49660
+ id: "industry-theme.skills-list",
49661
+ name: "Skills List",
49662
+ icon: "⚡",
49663
+ version: "0.1.0",
49664
+ author: "Principal ADE",
49665
+ description: "Display and manage Agent Skills from SKILL.md files",
49666
+ slices: ["fileTree", "globalSkills"]
49667
+ // Data slices this panel depends on
49668
+ },
49669
+ component: SkillsListPanel,
49670
+ // Optional: Called when this specific panel is mounted
49671
+ onMount: async (context) => {
49672
+ var _a;
49673
+ console.log(
49674
+ "Skills List Panel mounted",
49675
+ (_a = context.currentScope.repository) == null ? void 0 : _a.path
49676
+ );
49677
+ },
49678
+ // Optional: Called when this specific panel is unmounted
49679
+ onUnmount: async (_context) => {
49680
+ console.log("Skills List Panel unmounting");
49681
+ }
49682
+ },
49683
+ {
49684
+ metadata: {
49685
+ id: "industry-theme.skill-detail",
49686
+ name: "Skill Detail",
49687
+ icon: "📋",
49688
+ version: "0.1.0",
49689
+ author: "Principal ADE",
49690
+ description: "Display detailed information about a selected Agent Skill",
49691
+ slices: ["fileTree", "globalSkills"]
49692
+ // Data slices this panel depends on
49693
+ },
49694
+ component: SkillDetailPanel,
49695
+ // Optional: Called when this specific panel is mounted
49696
+ onMount: async (context) => {
49697
+ var _a;
49698
+ console.log(
49699
+ "Skill Detail Panel mounted",
49700
+ (_a = context.currentScope.repository) == null ? void 0 : _a.path
49701
+ );
49702
+ },
49703
+ // Optional: Called when this specific panel is unmounted
49704
+ onUnmount: async (_context) => {
49705
+ console.log("Skill Detail Panel unmounting");
49706
+ }
49707
+ },
49708
+ {
49709
+ metadata: {
49710
+ id: "industry-theme.agents-list",
49711
+ name: "Agents List",
49712
+ icon: "🤖",
49713
+ version: "0.1.0",
49714
+ author: "Principal ADE",
49715
+ description: "Display AGENTS.md documentation and Claude Code subagents",
49716
+ slices: ["fileTree", "globalAgents", "globalSubagents"]
49717
+ // Data slices this panel depends on
49718
+ },
49719
+ component: AgentsListPanel,
49720
+ // Optional: Called when this specific panel is mounted
49721
+ onMount: async (context) => {
49722
+ var _a;
49723
+ console.log(
49724
+ "Agents List Panel mounted",
49725
+ (_a = context.currentScope.repository) == null ? void 0 : _a.path
49726
+ );
49727
+ },
49728
+ // Optional: Called when this specific panel is unmounted
49729
+ onUnmount: async (_context) => {
49730
+ console.log("Agents List Panel unmounting");
49731
+ }
49732
+ },
49733
+ {
49734
+ metadata: {
49735
+ id: "industry-theme.agent-detail",
49736
+ name: "Agent Detail",
49737
+ icon: "📄",
49738
+ version: "0.1.0",
49739
+ author: "Principal ADE",
49740
+ description: "Display detailed information about a selected agent or subagent",
49741
+ slices: ["fileTree", "globalAgents", "globalSubagents"]
49742
+ // Data slices this panel depends on
49743
+ },
49744
+ component: AgentDetailPanel,
49745
+ // Optional: Called when this specific panel is mounted
49746
+ onMount: async (context) => {
49747
+ var _a;
49748
+ console.log(
49749
+ "Agent Detail Panel mounted",
49750
+ (_a = context.currentScope.repository) == null ? void 0 : _a.path
49751
+ );
49752
+ },
49753
+ // Optional: Called when this specific panel is unmounted
49754
+ onUnmount: async (_context) => {
49755
+ console.log("Agent Detail Panel unmounting");
48039
49756
  }
48040
49757
  }
48041
49758
  ];