@industry-theme/agent-panels 0.2.4 → 0.2.7

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.
@@ -2249,61 +2249,53 @@ const ChevronDown = createLucideIcon("chevron-down", __iconNode$l);
2249
2249
  * This source code is licensed under the ISC license.
2250
2250
  * See the LICENSE file in the root directory of this source tree.
2251
2251
  */
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 = [
2252
+ const __iconNode$k = [
2261
2253
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2262
2254
  ["line", { x1: "12", x2: "12", y1: "8", y2: "12", key: "1pkeuh" }],
2263
2255
  ["line", { x1: "12", x2: "12.01", y1: "16", y2: "16", key: "4dfq90" }]
2264
2256
  ];
2265
- const CircleAlert = createLucideIcon("circle-alert", __iconNode$j);
2257
+ const CircleAlert = createLucideIcon("circle-alert", __iconNode$k);
2266
2258
  /**
2267
2259
  * @license lucide-react v0.552.0 - ISC
2268
2260
  *
2269
2261
  * This source code is licensed under the ISC license.
2270
2262
  * See the LICENSE file in the root directory of this source tree.
2271
2263
  */
2272
- const __iconNode$i = [
2264
+ const __iconNode$j = [
2273
2265
  ["path", { d: "m18 16 4-4-4-4", key: "1inbqp" }],
2274
2266
  ["path", { d: "m6 8-4 4 4 4", key: "15zrgr" }],
2275
2267
  ["path", { d: "m14.5 4-5 16", key: "e7oirm" }]
2276
2268
  ];
2277
- const CodeXml = createLucideIcon("code-xml", __iconNode$i);
2269
+ const CodeXml = createLucideIcon("code-xml", __iconNode$j);
2278
2270
  /**
2279
2271
  * @license lucide-react v0.552.0 - ISC
2280
2272
  *
2281
2273
  * This source code is licensed under the ISC license.
2282
2274
  * See the LICENSE file in the root directory of this source tree.
2283
2275
  */
2284
- const __iconNode$h = [
2276
+ const __iconNode$i = [
2285
2277
  ["path", { d: "m16 18 6-6-6-6", key: "eg8j8" }],
2286
2278
  ["path", { d: "m8 6-6 6 6 6", key: "ppft3o" }]
2287
2279
  ];
2288
- const Code = createLucideIcon("code", __iconNode$h);
2280
+ const Code = createLucideIcon("code", __iconNode$i);
2289
2281
  /**
2290
2282
  * @license lucide-react v0.552.0 - ISC
2291
2283
  *
2292
2284
  * This source code is licensed under the ISC license.
2293
2285
  * See the LICENSE file in the root directory of this source tree.
2294
2286
  */
2295
- const __iconNode$g = [
2287
+ const __iconNode$h = [
2296
2288
  ["rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2", key: "17jyea" }],
2297
2289
  ["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" }]
2298
2290
  ];
2299
- const Copy = createLucideIcon("copy", __iconNode$g);
2291
+ const Copy = createLucideIcon("copy", __iconNode$h);
2300
2292
  /**
2301
2293
  * @license lucide-react v0.552.0 - ISC
2302
2294
  *
2303
2295
  * This source code is licensed under the ISC license.
2304
2296
  * See the LICENSE file in the root directory of this source tree.
2305
2297
  */
2306
- const __iconNode$f = [
2298
+ const __iconNode$g = [
2307
2299
  ["path", { d: "m15 15 6 6", key: "1s409w" }],
2308
2300
  ["path", { d: "m15 9 6-6", key: "ko1vev" }],
2309
2301
  ["path", { d: "M21 16v5h-5", key: "1ck2sf" }],
@@ -2313,14 +2305,14 @@ const __iconNode$f = [
2313
2305
  ["path", { d: "M3 8V3h5", key: "1ln10m" }],
2314
2306
  ["path", { d: "M9 9 3 3", key: "v551iv" }]
2315
2307
  ];
2316
- const Expand = createLucideIcon("expand", __iconNode$f);
2308
+ const Expand = createLucideIcon("expand", __iconNode$g);
2317
2309
  /**
2318
2310
  * @license lucide-react v0.552.0 - ISC
2319
2311
  *
2320
2312
  * This source code is licensed under the ISC license.
2321
2313
  * See the LICENSE file in the root directory of this source tree.
2322
2314
  */
2323
- const __iconNode$e = [
2315
+ const __iconNode$f = [
2324
2316
  [
2325
2317
  "path",
2326
2318
  {
@@ -2332,14 +2324,14 @@ const __iconNode$e = [
2332
2324
  ["path", { d: "M10 12.5 8 15l2 2.5", key: "1tg20x" }],
2333
2325
  ["path", { d: "m14 12.5 2 2.5-2 2.5", key: "yinavb" }]
2334
2326
  ];
2335
- const FileCode = createLucideIcon("file-code", __iconNode$e);
2327
+ const FileCode = createLucideIcon("file-code", __iconNode$f);
2336
2328
  /**
2337
2329
  * @license lucide-react v0.552.0 - ISC
2338
2330
  *
2339
2331
  * This source code is licensed under the ISC license.
2340
2332
  * See the LICENSE file in the root directory of this source tree.
2341
2333
  */
2342
- const __iconNode$d = [
2334
+ const __iconNode$e = [
2343
2335
  [
2344
2336
  "path",
2345
2337
  {
@@ -2352,14 +2344,14 @@ const __iconNode$d = [
2352
2344
  ["path", { d: "M16 13H8", key: "t4e002" }],
2353
2345
  ["path", { d: "M16 17H8", key: "z1uh3a" }]
2354
2346
  ];
2355
- const FileText = createLucideIcon("file-text", __iconNode$d);
2347
+ const FileText = createLucideIcon("file-text", __iconNode$e);
2356
2348
  /**
2357
2349
  * @license lucide-react v0.552.0 - ISC
2358
2350
  *
2359
2351
  * This source code is licensed under the ISC license.
2360
2352
  * See the LICENSE file in the root directory of this source tree.
2361
2353
  */
2362
- const __iconNode$c = [
2354
+ const __iconNode$d = [
2363
2355
  [
2364
2356
  "path",
2365
2357
  {
@@ -2377,14 +2369,14 @@ const __iconNode$c = [
2377
2369
  ["path", { d: "M3 5a2 2 0 0 0 2 2h3", key: "f2jnh7" }],
2378
2370
  ["path", { d: "M3 3v13a2 2 0 0 0 2 2h3", key: "k8epm1" }]
2379
2371
  ];
2380
- const FolderTree = createLucideIcon("folder-tree", __iconNode$c);
2372
+ const FolderTree = createLucideIcon("folder-tree", __iconNode$d);
2381
2373
  /**
2382
2374
  * @license lucide-react v0.552.0 - ISC
2383
2375
  *
2384
2376
  * This source code is licensed under the ISC license.
2385
2377
  * See the LICENSE file in the root directory of this source tree.
2386
2378
  */
2387
- const __iconNode$b = [
2379
+ const __iconNode$c = [
2388
2380
  [
2389
2381
  "path",
2390
2382
  {
@@ -2393,14 +2385,14 @@ const __iconNode$b = [
2393
2385
  }
2394
2386
  ]
2395
2387
  ];
2396
- const Folder = createLucideIcon("folder", __iconNode$b);
2388
+ const Folder = createLucideIcon("folder", __iconNode$c);
2397
2389
  /**
2398
2390
  * @license lucide-react v0.552.0 - ISC
2399
2391
  *
2400
2392
  * This source code is licensed under the ISC license.
2401
2393
  * See the LICENSE file in the root directory of this source tree.
2402
2394
  */
2403
- const __iconNode$a = [
2395
+ const __iconNode$b = [
2404
2396
  [
2405
2397
  "path",
2406
2398
  {
@@ -2410,49 +2402,49 @@ const __iconNode$a = [
2410
2402
  ],
2411
2403
  ["path", { d: "M9 18c-4.51 2-5-2-7-2", key: "9comsn" }]
2412
2404
  ];
2413
- const Github = createLucideIcon("github", __iconNode$a);
2405
+ const Github = createLucideIcon("github", __iconNode$b);
2414
2406
  /**
2415
2407
  * @license lucide-react v0.552.0 - ISC
2416
2408
  *
2417
2409
  * This source code is licensed under the ISC license.
2418
2410
  * See the LICENSE file in the root directory of this source tree.
2419
2411
  */
2420
- const __iconNode$9 = [
2412
+ const __iconNode$a = [
2421
2413
  ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
2422
2414
  ["path", { d: "M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20", key: "13o1zl" }],
2423
2415
  ["path", { d: "M2 12h20", key: "9i4pu4" }]
2424
2416
  ];
2425
- const Globe = createLucideIcon("globe", __iconNode$9);
2417
+ const Globe = createLucideIcon("globe", __iconNode$a);
2426
2418
  /**
2427
2419
  * @license lucide-react v0.552.0 - ISC
2428
2420
  *
2429
2421
  * This source code is licensed under the ISC license.
2430
2422
  * See the LICENSE file in the root directory of this source tree.
2431
2423
  */
2432
- const __iconNode$8 = [
2424
+ const __iconNode$9 = [
2433
2425
  ["rect", { width: "20", height: "14", x: "2", y: "3", rx: "2", key: "48i651" }],
2434
2426
  ["line", { x1: "8", x2: "16", y1: "21", y2: "21", key: "1svkeh" }],
2435
2427
  ["line", { x1: "12", x2: "12", y1: "17", y2: "21", key: "vw1qmm" }]
2436
2428
  ];
2437
- const Monitor = createLucideIcon("monitor", __iconNode$8);
2429
+ const Monitor = createLucideIcon("monitor", __iconNode$9);
2438
2430
  /**
2439
2431
  * @license lucide-react v0.552.0 - ISC
2440
2432
  *
2441
2433
  * This source code is licensed under the ISC license.
2442
2434
  * See the LICENSE file in the root directory of this source tree.
2443
2435
  */
2444
- const __iconNode$7 = [
2436
+ const __iconNode$8 = [
2445
2437
  ["path", { d: "M18 8L22 12L18 16", key: "1r0oui" }],
2446
2438
  ["path", { d: "M2 12H22", key: "1m8cig" }]
2447
2439
  ];
2448
- const MoveRight = createLucideIcon("move-right", __iconNode$7);
2440
+ const MoveRight = createLucideIcon("move-right", __iconNode$8);
2449
2441
  /**
2450
2442
  * @license lucide-react v0.552.0 - ISC
2451
2443
  *
2452
2444
  * This source code is licensed under the ISC license.
2453
2445
  * See the LICENSE file in the root directory of this source tree.
2454
2446
  */
2455
- const __iconNode$6 = [
2447
+ const __iconNode$7 = [
2456
2448
  [
2457
2449
  "path",
2458
2450
  {
@@ -2464,14 +2456,14 @@ const __iconNode$6 = [
2464
2456
  ["polyline", { points: "3.29 7 12 12 20.71 7", key: "ousv84" }],
2465
2457
  ["path", { d: "m7.5 4.27 9 5.15", key: "1c824w" }]
2466
2458
  ];
2467
- const Package = createLucideIcon("package", __iconNode$6);
2459
+ const Package = createLucideIcon("package", __iconNode$7);
2468
2460
  /**
2469
2461
  * @license lucide-react v0.552.0 - ISC
2470
2462
  *
2471
2463
  * This source code is licensed under the ISC license.
2472
2464
  * See the LICENSE file in the root directory of this source tree.
2473
2465
  */
2474
- const __iconNode$5 = [
2466
+ const __iconNode$6 = [
2475
2467
  [
2476
2468
  "path",
2477
2469
  {
@@ -2480,31 +2472,49 @@ const __iconNode$5 = [
2480
2472
  }
2481
2473
  ]
2482
2474
  ];
2483
- const Play = createLucideIcon("play", __iconNode$5);
2475
+ const Play = createLucideIcon("play", __iconNode$6);
2484
2476
  /**
2485
2477
  * @license lucide-react v0.552.0 - ISC
2486
2478
  *
2487
2479
  * This source code is licensed under the ISC license.
2488
2480
  * See the LICENSE file in the root directory of this source tree.
2489
2481
  */
2490
- const __iconNode$4 = [
2482
+ const __iconNode$5 = [
2491
2483
  ["path", { d: "M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8", key: "v9h5vc" }],
2492
2484
  ["path", { d: "M21 3v5h-5", key: "1q7to0" }],
2493
2485
  ["path", { d: "M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16", key: "3uifl3" }],
2494
2486
  ["path", { d: "M8 16H3v5", key: "1cv678" }]
2495
2487
  ];
2496
- const RefreshCw = createLucideIcon("refresh-cw", __iconNode$4);
2488
+ const RefreshCw = createLucideIcon("refresh-cw", __iconNode$5);
2497
2489
  /**
2498
2490
  * @license lucide-react v0.552.0 - ISC
2499
2491
  *
2500
2492
  * This source code is licensed under the ISC license.
2501
2493
  * See the LICENSE file in the root directory of this source tree.
2502
2494
  */
2503
- const __iconNode$3 = [
2495
+ const __iconNode$4 = [
2504
2496
  ["path", { d: "m21 21-4.34-4.34", key: "14j7rj" }],
2505
2497
  ["circle", { cx: "11", cy: "11", r: "8", key: "4ej97u" }]
2506
2498
  ];
2507
- const Search = createLucideIcon("search", __iconNode$3);
2499
+ const Search = createLucideIcon("search", __iconNode$4);
2500
+ /**
2501
+ * @license lucide-react v0.552.0 - ISC
2502
+ *
2503
+ * This source code is licensed under the ISC license.
2504
+ * See the LICENSE file in the root directory of this source tree.
2505
+ */
2506
+ const __iconNode$3 = [
2507
+ [
2508
+ "path",
2509
+ {
2510
+ d: "m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",
2511
+ key: "wmoenq"
2512
+ }
2513
+ ],
2514
+ ["path", { d: "M12 9v4", key: "juzpu7" }],
2515
+ ["path", { d: "M12 17h.01", key: "p32p05" }]
2516
+ ];
2517
+ const TriangleAlert = createLucideIcon("triangle-alert", __iconNode$3);
2508
2518
  /**
2509
2519
  * @license lucide-react v0.552.0 - ISC
2510
2520
  *
@@ -2558,13 +2568,19 @@ const determineSkillSource = (path2) => {
2558
2568
  return { source: "project-other", priority: 5 };
2559
2569
  }
2560
2570
  };
2561
- const findSkillFiles = (fileTree) => {
2571
+ const findSkillFiles = (fileTree, isBrowserMode = false) => {
2562
2572
  const skillFiles = fileTree.allFiles.filter((file) => {
2563
2573
  const path2 = file.relativePath;
2564
2574
  const isMarkdown = file.name.endsWith(".md");
2565
- const isInSkillDir = path2.includes(".agent/skills/") || path2.includes(".claude/skills/");
2566
2575
  const isMetadata = file.name === ".metadata.json" || file.name.startsWith(".");
2567
- return isMarkdown && isInSkillDir && !isMetadata;
2576
+ if (isMetadata) {
2577
+ return false;
2578
+ }
2579
+ if (isBrowserMode) {
2580
+ return file.name === "SKILL.md" || file.name.toLowerCase() === "skill.md";
2581
+ }
2582
+ const isInSkillDir = path2.includes(".agent/skills/") || path2.includes(".claude/skills/");
2583
+ return isMarkdown && isInSkillDir;
2568
2584
  });
2569
2585
  return skillFiles.map((file) => file.relativePath);
2570
2586
  };
@@ -2600,6 +2616,21 @@ const analyzeSkillStructure = (fileTree, skillPath) => {
2600
2616
  assetFiles
2601
2617
  };
2602
2618
  };
2619
+ const hasFrontmatterYAML = (content2) => {
2620
+ const trimmedContent = content2.trim();
2621
+ if (!trimmedContent.startsWith("---")) {
2622
+ return false;
2623
+ }
2624
+ const lines = trimmedContent.split("\n");
2625
+ let frontmatterEnd = -1;
2626
+ for (let i = 1; i < lines.length; i++) {
2627
+ if (lines[i].trim() === "---") {
2628
+ frontmatterEnd = i;
2629
+ break;
2630
+ }
2631
+ }
2632
+ return frontmatterEnd > 0;
2633
+ };
2603
2634
  const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter) => {
2604
2635
  const pathParts = path2.split("/");
2605
2636
  const fileName = pathParts[pathParts.length - 1];
@@ -2639,6 +2670,7 @@ const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter) =
2639
2670
  console.debug("[useSkillsData] No metadata file for skill:", skillDirName);
2640
2671
  }
2641
2672
  }
2673
+ const hasFrontmatter = hasFrontmatterYAML(content2);
2642
2674
  return {
2643
2675
  id: path2,
2644
2676
  name: skillDirName.replace(/-/g, " ").replace(/_/g, " "),
@@ -2650,7 +2682,8 @@ const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter) =
2650
2682
  ...structure,
2651
2683
  source: source2,
2652
2684
  priority,
2653
- metadata
2685
+ metadata,
2686
+ hasFrontmatter
2654
2687
  };
2655
2688
  };
2656
2689
  const useSkillsData = ({
@@ -2681,14 +2714,16 @@ const useSkillsData = ({
2681
2714
  try {
2682
2715
  let localSkills = [];
2683
2716
  if (fileTree && (fileSystem == null ? void 0 : fileSystem.readFile) && repoPath) {
2717
+ const isBrowserMode = !repoPath.startsWith("/");
2684
2718
  console.log("[useSkillsData] fileTree:", fileTree);
2685
2719
  console.log("[useSkillsData] typeof fileTree:", typeof fileTree);
2686
2720
  console.log("[useSkillsData] fileTree keys:", Object.keys(fileTree));
2687
- const skillPaths = findSkillFiles(fileTree);
2721
+ console.log("[useSkillsData] Browser mode:", isBrowserMode);
2722
+ const skillPaths = findSkillFiles(fileTree, isBrowserMode);
2688
2723
  console.log("[useSkillsData] Found skill paths:", skillPaths);
2689
2724
  const skillPromises = skillPaths.map(async (skillPath) => {
2690
2725
  try {
2691
- const fullPath = `${repoPath}/${skillPath}`;
2726
+ const fullPath = isBrowserMode ? skillPath : `${repoPath}/${skillPath}`;
2692
2727
  const content2 = await fileSystem.readFile(fullPath);
2693
2728
  return parseSkillContent(content2, skillPath, fileTree, fileSystem);
2694
2729
  } catch (err) {
@@ -2786,6 +2821,17 @@ const SkillCard = ({
2786
2821
  var _a, _b, _c, _d, _e2, _f, _g, _h;
2787
2822
  const { theme: theme2 } = useTheme();
2788
2823
  const sourceConfig = getSourceConfig(skill.source);
2824
+ const [pathCopied, setPathCopied] = React2__default.useState(false);
2825
+ const handleCopyPath = async (e) => {
2826
+ e.stopPropagation();
2827
+ try {
2828
+ await navigator.clipboard.writeText(skill.path);
2829
+ setPathCopied(true);
2830
+ setTimeout(() => setPathCopied(false), 2e3);
2831
+ } catch (err) {
2832
+ console.error("Failed to copy path:", err);
2833
+ }
2834
+ };
2789
2835
  return /* @__PURE__ */ jsxs(
2790
2836
  "div",
2791
2837
  {
@@ -2817,105 +2863,171 @@ const SkillCard = ({
2817
2863
  }
2818
2864
  },
2819
2865
  children: [
2820
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between", gap: "12px" }, children: [
2821
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "10px", flex: 1, minWidth: 0 }, children: [
2866
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "flex-start", justifyContent: "space-between", gap: "12px" }, children: [
2867
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px", flex: 1, minWidth: 0 }, children: [
2822
2868
  /* @__PURE__ */ jsx(
2823
- "div",
2869
+ "h3",
2824
2870
  {
2825
2871
  style: {
2826
- width: "36px",
2827
- height: "36px",
2828
- borderRadius: theme2.radii[1],
2829
- background: `${theme2.colors.primary}20`,
2830
- display: "flex",
2831
- alignItems: "center",
2832
- justifyContent: "center",
2833
- flexShrink: 0
2872
+ margin: 0,
2873
+ fontSize: theme2.fontSizes[2],
2874
+ fontWeight: theme2.fontWeights.semibold,
2875
+ color: theme2.colors.text,
2876
+ overflow: "hidden",
2877
+ textOverflow: "ellipsis",
2878
+ whiteSpace: "nowrap",
2879
+ textTransform: "capitalize"
2834
2880
  },
2835
- children: /* @__PURE__ */ jsx(FileText, { size: 20, color: theme2.colors.primary })
2881
+ children: skill.name
2836
2882
  }
2837
2883
  ),
2838
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px", flex: 1, minWidth: 0 }, children: [
2839
- /* @__PURE__ */ jsx(
2840
- "h3",
2884
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "4px", alignItems: "center", flexWrap: "wrap" }, children: [
2885
+ /* @__PURE__ */ jsxs(
2886
+ "div",
2841
2887
  {
2842
2888
  style: {
2843
- margin: 0,
2844
- fontSize: theme2.fontSizes[2],
2845
- fontWeight: theme2.fontWeights.semibold,
2846
- color: theme2.colors.text,
2847
- overflow: "hidden",
2848
- textOverflow: "ellipsis",
2849
- whiteSpace: "nowrap",
2850
- textTransform: "capitalize"
2889
+ display: "inline-flex",
2890
+ alignItems: "center",
2891
+ gap: "4px",
2892
+ padding: "2px 6px",
2893
+ borderRadius: theme2.radii[1],
2894
+ backgroundColor: sourceConfig.bgColor,
2895
+ border: `1px solid ${sourceConfig.borderColor}`,
2896
+ fontSize: theme2.fontSizes[0],
2897
+ color: sourceConfig.color,
2898
+ fontWeight: 500,
2899
+ width: "fit-content"
2851
2900
  },
2852
- children: skill.name
2901
+ title: `Source: ${skill.source}`,
2902
+ children: [
2903
+ /* @__PURE__ */ jsx(sourceConfig.icon, { size: 10 }),
2904
+ /* @__PURE__ */ jsx("span", { children: sourceConfig.label })
2905
+ ]
2853
2906
  }
2854
2907
  ),
2855
- /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "4px", alignItems: "center", flexWrap: "wrap" }, children: [
2856
- /* @__PURE__ */ jsxs(
2857
- "div",
2858
- {
2859
- style: {
2860
- display: "inline-flex",
2861
- alignItems: "center",
2862
- gap: "4px",
2863
- padding: "2px 6px",
2864
- borderRadius: theme2.radii[1],
2865
- backgroundColor: sourceConfig.bgColor,
2866
- border: `1px solid ${sourceConfig.borderColor}`,
2867
- fontSize: theme2.fontSizes[0],
2868
- color: sourceConfig.color,
2869
- fontWeight: 500,
2870
- width: "fit-content"
2871
- },
2872
- title: `Source: ${skill.source}`,
2873
- children: [
2874
- /* @__PURE__ */ jsx(sourceConfig.icon, { size: 10 }),
2875
- /* @__PURE__ */ jsx("span", { children: sourceConfig.label })
2876
- ]
2877
- }
2878
- ),
2879
- ((_a = skill.metadata) == null ? void 0 : _a.owner) && ((_b = skill.metadata) == null ? void 0 : _b.repo) && /* @__PURE__ */ jsxs(
2880
- "div",
2881
- {
2882
- style: {
2883
- display: "inline-flex",
2884
- alignItems: "center",
2885
- gap: "4px",
2886
- padding: "2px 6px",
2887
- borderRadius: theme2.radii[1],
2888
- backgroundColor: `${theme2.colors.textSecondary}15`,
2889
- border: `1px solid ${theme2.colors.textSecondary}30`,
2890
- fontSize: theme2.fontSizes[0],
2891
- color: theme2.colors.textSecondary,
2892
- fontWeight: 500,
2893
- fontFamily: theme2.fonts.monospace,
2894
- width: "fit-content"
2895
- },
2896
- title: `From: ${skill.metadata.installedFrom}
2908
+ ((_a = skill.metadata) == null ? void 0 : _a.owner) && ((_b = skill.metadata) == null ? void 0 : _b.repo) && /* @__PURE__ */ jsxs(
2909
+ "div",
2910
+ {
2911
+ style: {
2912
+ display: "inline-flex",
2913
+ alignItems: "center",
2914
+ gap: "4px",
2915
+ padding: "2px 6px",
2916
+ borderRadius: theme2.radii[1],
2917
+ backgroundColor: `${theme2.colors.textSecondary}15`,
2918
+ border: `1px solid ${theme2.colors.textSecondary}30`,
2919
+ fontSize: theme2.fontSizes[0],
2920
+ color: theme2.colors.textSecondary,
2921
+ fontWeight: 500,
2922
+ fontFamily: theme2.fonts.monospace,
2923
+ width: "fit-content"
2924
+ },
2925
+ title: `From: ${skill.metadata.installedFrom}
2897
2926
  Installed: ${skill.metadata.installedAt ? new Date(skill.metadata.installedAt).toLocaleString() : "Unknown"}`,
2898
- children: [
2899
- /* @__PURE__ */ jsx(Github, { size: 10 }),
2900
- /* @__PURE__ */ jsxs("span", { children: [
2901
- skill.metadata.owner,
2902
- "/",
2903
- skill.metadata.repo
2904
- ] })
2905
- ]
2906
- }
2907
- )
2908
- ] })
2927
+ children: [
2928
+ /* @__PURE__ */ jsx(Github, { size: 10 }),
2929
+ /* @__PURE__ */ jsxs("span", { children: [
2930
+ skill.metadata.owner,
2931
+ "/",
2932
+ skill.metadata.repo
2933
+ ] })
2934
+ ]
2935
+ }
2936
+ ),
2937
+ !skill.hasFrontmatter && /* @__PURE__ */ jsxs(
2938
+ "div",
2939
+ {
2940
+ style: {
2941
+ display: "inline-flex",
2942
+ alignItems: "center",
2943
+ gap: "4px",
2944
+ padding: "2px 6px",
2945
+ borderRadius: theme2.radii[1],
2946
+ backgroundColor: "#f59e0b15",
2947
+ // warning amber
2948
+ border: "1px solid #f59e0b30",
2949
+ fontSize: theme2.fontSizes[0],
2950
+ color: "#f59e0b",
2951
+ fontWeight: 500,
2952
+ width: "fit-content"
2953
+ },
2954
+ title: "This skill is missing YAML frontmatter metadata",
2955
+ children: [
2956
+ /* @__PURE__ */ jsx(TriangleAlert, { size: 10 }),
2957
+ /* @__PURE__ */ jsx("span", { children: "No Frontmatter" })
2958
+ ]
2959
+ }
2960
+ )
2909
2961
  ] })
2910
2962
  ] }),
2911
- onClick && /* @__PURE__ */ jsx(
2912
- ChevronRight,
2913
- {
2914
- size: 18,
2915
- color: theme2.colors.textSecondary,
2916
- style: { flexShrink: 0 }
2917
- }
2918
- )
2963
+ (skill.hasScripts || skill.hasReferences || skill.hasAssets) && /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "6px", flexWrap: "wrap", flexShrink: 0 }, children: [
2964
+ skill.hasScripts && /* @__PURE__ */ jsxs(
2965
+ "div",
2966
+ {
2967
+ style: {
2968
+ display: "flex",
2969
+ alignItems: "center",
2970
+ gap: "4px",
2971
+ padding: "2px 8px",
2972
+ borderRadius: theme2.radii[1],
2973
+ backgroundColor: `${theme2.colors.primary}15`,
2974
+ border: `1px solid ${theme2.colors.primary}30`,
2975
+ fontSize: theme2.fontSizes[0],
2976
+ color: theme2.colors.primary,
2977
+ fontWeight: 500
2978
+ },
2979
+ title: `Scripts: ${(_c = skill.scriptFiles) == null ? void 0 : _c.join(", ")}`,
2980
+ children: [
2981
+ /* @__PURE__ */ jsx(Code, { size: 12 }),
2982
+ /* @__PURE__ */ jsx("span", { children: ((_d = skill.scriptFiles) == null ? void 0 : _d.length) || 0 })
2983
+ ]
2984
+ }
2985
+ ),
2986
+ skill.hasReferences && /* @__PURE__ */ jsxs(
2987
+ "div",
2988
+ {
2989
+ style: {
2990
+ display: "flex",
2991
+ alignItems: "center",
2992
+ gap: "4px",
2993
+ padding: "2px 8px",
2994
+ borderRadius: theme2.radii[1],
2995
+ backgroundColor: `${theme2.colors.secondary}15`,
2996
+ border: `1px solid ${theme2.colors.secondary}30`,
2997
+ fontSize: theme2.fontSizes[0],
2998
+ color: theme2.colors.secondary,
2999
+ fontWeight: 500
3000
+ },
3001
+ title: `References: ${(_e2 = skill.referenceFiles) == null ? void 0 : _e2.join(", ")}`,
3002
+ children: [
3003
+ /* @__PURE__ */ jsx(BookOpen, { size: 12 }),
3004
+ /* @__PURE__ */ jsx("span", { children: ((_f = skill.referenceFiles) == null ? void 0 : _f.length) || 0 })
3005
+ ]
3006
+ }
3007
+ ),
3008
+ skill.hasAssets && /* @__PURE__ */ jsxs(
3009
+ "div",
3010
+ {
3011
+ style: {
3012
+ display: "flex",
3013
+ alignItems: "center",
3014
+ gap: "4px",
3015
+ padding: "2px 8px",
3016
+ borderRadius: theme2.radii[1],
3017
+ backgroundColor: `${theme2.colors.accent}15`,
3018
+ border: `1px solid ${theme2.colors.accent}30`,
3019
+ fontSize: theme2.fontSizes[0],
3020
+ color: theme2.colors.accent,
3021
+ fontWeight: 500
3022
+ },
3023
+ title: `Assets: ${(_g = skill.assetFiles) == null ? void 0 : _g.join(", ")}`,
3024
+ children: [
3025
+ /* @__PURE__ */ jsx(Package, { size: 12 }),
3026
+ /* @__PURE__ */ jsx("span", { children: ((_h = skill.assetFiles) == null ? void 0 : _h.length) || 0 })
3027
+ ]
3028
+ }
3029
+ )
3030
+ ] })
2919
3031
  ] }),
2920
3032
  skill.description && /* @__PURE__ */ jsx(
2921
3033
  "p",
@@ -2975,90 +3087,36 @@ Installed: ${skill.metadata.installedAt ? new Date(skill.metadata.installedAt).t
2975
3087
  },
2976
3088
  index2
2977
3089
  )) }),
2978
- (skill.hasScripts || skill.hasReferences || skill.hasAssets) && /* @__PURE__ */ jsxs("div", { style: { display: "flex", gap: "6px", flexWrap: "wrap" }, children: [
2979
- skill.hasScripts && /* @__PURE__ */ jsxs(
2980
- "div",
2981
- {
2982
- style: {
2983
- display: "flex",
2984
- alignItems: "center",
2985
- gap: "4px",
2986
- padding: "2px 8px",
2987
- borderRadius: theme2.radii[1],
2988
- backgroundColor: `${theme2.colors.primary}15`,
2989
- border: `1px solid ${theme2.colors.primary}30`,
2990
- fontSize: theme2.fontSizes[0],
2991
- color: theme2.colors.primary,
2992
- fontWeight: 500
2993
- },
2994
- title: `Scripts: ${(_c = skill.scriptFiles) == null ? void 0 : _c.join(", ")}`,
2995
- children: [
2996
- /* @__PURE__ */ jsx(Code, { size: 12 }),
2997
- /* @__PURE__ */ jsx("span", { children: ((_d = skill.scriptFiles) == null ? void 0 : _d.length) || 0 })
2998
- ]
2999
- }
3000
- ),
3001
- skill.hasReferences && /* @__PURE__ */ jsxs(
3002
- "div",
3003
- {
3004
- style: {
3005
- display: "flex",
3006
- alignItems: "center",
3007
- gap: "4px",
3008
- padding: "2px 8px",
3009
- borderRadius: theme2.radii[1],
3010
- backgroundColor: `${theme2.colors.secondary}15`,
3011
- border: `1px solid ${theme2.colors.secondary}30`,
3012
- fontSize: theme2.fontSizes[0],
3013
- color: theme2.colors.secondary,
3014
- fontWeight: 500
3015
- },
3016
- title: `References: ${(_e2 = skill.referenceFiles) == null ? void 0 : _e2.join(", ")}`,
3017
- children: [
3018
- /* @__PURE__ */ jsx(BookOpen, { size: 12 }),
3019
- /* @__PURE__ */ jsx("span", { children: ((_f = skill.referenceFiles) == null ? void 0 : _f.length) || 0 })
3020
- ]
3021
- }
3022
- ),
3023
- skill.hasAssets && /* @__PURE__ */ jsxs(
3024
- "div",
3025
- {
3026
- style: {
3027
- display: "flex",
3028
- alignItems: "center",
3029
- gap: "4px",
3030
- padding: "2px 8px",
3031
- borderRadius: theme2.radii[1],
3032
- backgroundColor: `${theme2.colors.accent}15`,
3033
- border: `1px solid ${theme2.colors.accent}30`,
3034
- fontSize: theme2.fontSizes[0],
3035
- color: theme2.colors.accent,
3036
- fontWeight: 500
3037
- },
3038
- title: `Assets: ${(_g = skill.assetFiles) == null ? void 0 : _g.join(", ")}`,
3039
- children: [
3040
- /* @__PURE__ */ jsx(Package, { size: 12 }),
3041
- /* @__PURE__ */ jsx("span", { children: ((_h = skill.assetFiles) == null ? void 0 : _h.length) || 0 })
3042
- ]
3043
- }
3044
- )
3045
- ] }),
3046
3090
  /* @__PURE__ */ jsx(
3047
3091
  "div",
3048
3092
  {
3093
+ onClick: handleCopyPath,
3049
3094
  style: {
3050
3095
  fontSize: theme2.fontSizes[0],
3051
- color: theme2.colors.textMuted,
3096
+ color: pathCopied ? theme2.colors.success : theme2.colors.textMuted,
3052
3097
  fontFamily: theme2.fonts.monospace,
3053
- background: theme2.colors.backgroundSecondary,
3098
+ background: pathCopied ? `${theme2.colors.success}15` : theme2.colors.backgroundSecondary,
3054
3099
  padding: "4px 8px",
3055
3100
  borderRadius: theme2.radii[1],
3056
3101
  overflow: "hidden",
3057
3102
  textOverflow: "ellipsis",
3058
- whiteSpace: "nowrap"
3103
+ whiteSpace: "nowrap",
3104
+ cursor: "pointer",
3105
+ transition: "all 0.2s ease",
3106
+ border: `1px solid ${pathCopied ? theme2.colors.success : "transparent"}`
3107
+ },
3108
+ title: pathCopied ? "Copied!" : "Click to copy path",
3109
+ onMouseEnter: (e) => {
3110
+ if (!pathCopied) {
3111
+ e.currentTarget.style.background = theme2.colors.backgroundTertiary || theme2.colors.border;
3112
+ }
3059
3113
  },
3060
- title: skill.path,
3061
- children: skill.path
3114
+ onMouseLeave: (e) => {
3115
+ if (!pathCopied) {
3116
+ e.currentTarget.style.background = theme2.colors.backgroundSecondary;
3117
+ }
3118
+ },
3119
+ children: pathCopied ? "Copied!" : skill.path
3062
3120
  }
3063
3121
  )
3064
3122
  ]
@@ -48116,6 +48174,51 @@ const SkillDetailPanel = ({
48116
48174
  ]
48117
48175
  }
48118
48176
  ),
48177
+ !skill.hasFrontmatter && /* @__PURE__ */ jsxs(
48178
+ "div",
48179
+ {
48180
+ style: {
48181
+ padding: "1rem",
48182
+ borderBottom: `1px solid ${theme2.colors.border}`,
48183
+ display: "flex",
48184
+ alignItems: "center",
48185
+ gap: "0.75rem",
48186
+ backgroundColor: "#f59e0b15",
48187
+ // warning amber background
48188
+ borderLeft: "4px solid #f59e0b"
48189
+ },
48190
+ children: [
48191
+ /* @__PURE__ */ jsx(TriangleAlert, { size: 20, color: "#f59e0b" }),
48192
+ /* @__PURE__ */ jsxs("div", { style: { flex: 1 }, children: [
48193
+ /* @__PURE__ */ jsx(
48194
+ "div",
48195
+ {
48196
+ style: {
48197
+ fontSize: theme2.fontSizes[1],
48198
+ color: "#f59e0b",
48199
+ fontFamily: theme2.fonts.body,
48200
+ fontWeight: theme2.fontWeights.semibold,
48201
+ marginBottom: "0.25rem"
48202
+ },
48203
+ children: "Missing YAML Frontmatter"
48204
+ }
48205
+ ),
48206
+ /* @__PURE__ */ jsx(
48207
+ "div",
48208
+ {
48209
+ style: {
48210
+ fontSize: theme2.fontSizes[0],
48211
+ color: theme2.colors.textSecondary,
48212
+ fontFamily: theme2.fonts.body,
48213
+ lineHeight: "1.5"
48214
+ },
48215
+ children: "This skill is missing YAML frontmatter metadata. Skills should have frontmatter (like backlog tasks) to properly define metadata such as name, description, and capabilities."
48216
+ }
48217
+ )
48218
+ ] })
48219
+ ]
48220
+ }
48221
+ ),
48119
48222
  /* @__PURE__ */ jsx("div", { style: { flex: 1, overflow: "auto" }, children: /* @__PURE__ */ jsx(
48120
48223
  SkillMarkdown,
48121
48224
  {