@industry-theme/agent-panels 0.2.25 → 0.2.27

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.
package/dist/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  import { type SkillsListPanelProps } from './panels/SkillsListPanel';
2
2
  import { SkillsBrowsePanel } from './panels/SkillsBrowsePanel';
3
+ import { GlobalSkillsPanel, type GlobalSkillsPanelProps } from './panels/GlobalSkillsPanel';
3
4
  import { type SkillDetailPanelProps } from './panels/SkillDetailPanel';
4
5
  import { AgenticResourcesPanel } from './panels/AgenticResourcesPanel';
5
6
  import type { PanelDefinition } from './types';
6
7
  import type { Skill } from './panels/skills/hooks/useSkillsData';
7
- export type { SkillsListPanelProps, SkillDetailPanelProps, Skill };
8
- export { SkillsBrowsePanel, AgenticResourcesPanel };
8
+ export type { SkillsListPanelProps, SkillDetailPanelProps, GlobalSkillsPanelProps, Skill };
9
+ export { SkillsBrowsePanel, GlobalSkillsPanel, AgenticResourcesPanel };
9
10
  /**
10
11
  * Export array of panel definitions.
11
12
  * This is the required export for panel extensions.
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAGjE,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;AAGnE,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AAEpD;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,eAAe,EAmKnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,qBAGzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,qBAG3B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AACtF,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,KAAK,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAoB,KAAK,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,SAAS,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,qCAAqC,CAAC;AAGjE,YAAY,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC;AAG3F,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,CAAC;AAEvE;;;GAGG;AACH,eAAO,MAAM,MAAM,EAAE,eAAe,EA8LnC,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,qBAGzB,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,qBAG3B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import React from 'react';
2
+ import type { PanelComponentProps } from '../types';
3
+ export interface GlobalSkillsPanelProps extends PanelComponentProps {
4
+ /**
5
+ * When true, shows the refresh button and enables refresh functionality.
6
+ * The host must support handling 'skills:refresh' events.
7
+ */
8
+ supportsRefresh?: boolean;
9
+ }
10
+ /**
11
+ * GlobalSkillsPanel - A panel for displaying ONLY global Agent Skills
12
+ *
13
+ * This panel shows:
14
+ * - List/grid of global skills only (no project skills)
15
+ * - Search functionality to filter skills
16
+ * - Skill metadata (name, description, capabilities)
17
+ * - Click to select and emit events for detail views
18
+ *
19
+ * Use this panel when you want to show only global skills without a project/global filter toggle.
20
+ * This is ideal for views that are specifically about browsing and managing global skill installations.
21
+ */
22
+ export declare const GlobalSkillsPanel: React.FC<GlobalSkillsPanelProps>;
23
+ //# sourceMappingURL=GlobalSkillsPanel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"GlobalSkillsPanel.d.ts","sourceRoot":"","sources":["../../src/panels/GlobalSkillsPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AAIpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAIpD,MAAM,WAAW,sBAAuB,SAAQ,mBAAmB;IACjE;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CA0W9D,CAAC"}
@@ -4237,6 +4237,358 @@ const SkillsBrowsePanel = ({
4237
4237
  }
4238
4238
  );
4239
4239
  };
4240
+ const GlobalSkillsPanel = ({
4241
+ context,
4242
+ events,
4243
+ supportsRefresh = false
4244
+ }) => {
4245
+ const { theme: theme2 } = useTheme();
4246
+ const panelRef = useRef(null);
4247
+ const [selectedSkillId, setSelectedSkillId] = useState(null);
4248
+ const [searchQuery, setSearchQuery] = useState("");
4249
+ const [isRefreshing, setIsRefreshing] = useState(false);
4250
+ const { skills, isLoading, error, refreshSkills } = useSkillsData({ context });
4251
+ gt("global-skills", events, () => {
4252
+ var _a;
4253
+ return (_a = panelRef.current) == null ? void 0 : _a.focus();
4254
+ });
4255
+ useEffect(() => {
4256
+ const unsubscribeInstalled = events.on("skill:installed", () => {
4257
+ console.log("[GlobalSkillsPanel] Skill installed, refreshing...");
4258
+ refreshSkills();
4259
+ });
4260
+ const unsubscribeUninstalled = events.on("skill:uninstalled", () => {
4261
+ console.log("[GlobalSkillsPanel] Skill uninstalled, refreshing...");
4262
+ refreshSkills();
4263
+ });
4264
+ return () => {
4265
+ unsubscribeInstalled();
4266
+ unsubscribeUninstalled();
4267
+ };
4268
+ }, [events, refreshSkills]);
4269
+ const filteredSkills = useMemo(() => {
4270
+ let filtered = skills.filter((skill) => {
4271
+ if (skill.installedLocations && skill.installedLocations.length > 0) {
4272
+ return skill.installedLocations.some(
4273
+ (loc) => loc.source === "global-universal" || loc.source === "global-claude"
4274
+ );
4275
+ }
4276
+ return skill.source === "global-universal" || skill.source === "global-claude";
4277
+ });
4278
+ if (searchQuery.trim()) {
4279
+ const query = searchQuery.toLowerCase().trim();
4280
+ filtered = filtered.filter((skill) => {
4281
+ var _a, _b;
4282
+ if (skill.name.toLowerCase().includes(query)) return true;
4283
+ if ((_a = skill.description) == null ? void 0 : _a.toLowerCase().includes(query)) return true;
4284
+ if ((_b = skill.capabilities) == null ? void 0 : _b.some((cap2) => cap2.toLowerCase().includes(query)))
4285
+ return true;
4286
+ if (skill.path.toLowerCase().includes(query)) return true;
4287
+ return false;
4288
+ });
4289
+ }
4290
+ return filtered;
4291
+ }, [skills, searchQuery]);
4292
+ const handleSkillClick = (skill) => {
4293
+ setSelectedSkillId(skill.id);
4294
+ if (events) {
4295
+ events.emit({
4296
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4297
+ type: "skill:selected",
4298
+ source: "global-skills-panel",
4299
+ timestamp: Date.now(),
4300
+ payload: { skillId: skill.id, skill }
4301
+ });
4302
+ }
4303
+ };
4304
+ const handleRefresh = () => {
4305
+ setIsRefreshing(true);
4306
+ if (events) {
4307
+ events.emit({
4308
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
4309
+ type: "skills:refresh",
4310
+ source: "global-skills-panel",
4311
+ timestamp: Date.now(),
4312
+ payload: {}
4313
+ });
4314
+ }
4315
+ setTimeout(() => {
4316
+ setIsRefreshing(false);
4317
+ }, 800);
4318
+ };
4319
+ return /* @__PURE__ */ jsxs(
4320
+ "div",
4321
+ {
4322
+ ref: panelRef,
4323
+ tabIndex: -1,
4324
+ style: {
4325
+ padding: "clamp(12px, 3vw, 20px)",
4326
+ fontFamily: theme2.fonts.body,
4327
+ height: "100%",
4328
+ boxSizing: "border-box",
4329
+ display: "flex",
4330
+ flexDirection: "column",
4331
+ gap: "16px",
4332
+ overflow: "hidden",
4333
+ backgroundColor: theme2.colors.background,
4334
+ color: theme2.colors.text,
4335
+ outline: "none"
4336
+ },
4337
+ children: [
4338
+ /* @__PURE__ */ jsxs(
4339
+ "div",
4340
+ {
4341
+ style: {
4342
+ flexShrink: 0,
4343
+ display: "flex",
4344
+ alignItems: "center",
4345
+ justifyContent: "space-between",
4346
+ gap: "12px",
4347
+ flexWrap: "wrap"
4348
+ },
4349
+ children: [
4350
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px" }, children: [
4351
+ /* @__PURE__ */ jsx(
4352
+ "h2",
4353
+ {
4354
+ style: {
4355
+ margin: 0,
4356
+ fontSize: theme2.fontSizes[4],
4357
+ color: theme2.colors.text
4358
+ },
4359
+ children: /* @__PURE__ */ jsx(
4360
+ "a",
4361
+ {
4362
+ href: "https://agentskills.io/",
4363
+ target: "_blank",
4364
+ rel: "noopener noreferrer",
4365
+ style: {
4366
+ color: "inherit",
4367
+ textDecoration: "none"
4368
+ },
4369
+ onMouseEnter: (e) => e.currentTarget.style.textDecoration = "underline",
4370
+ onMouseLeave: (e) => e.currentTarget.style.textDecoration = "none",
4371
+ children: "Global Skills"
4372
+ }
4373
+ )
4374
+ }
4375
+ ),
4376
+ !isLoading && /* @__PURE__ */ jsxs(
4377
+ "span",
4378
+ {
4379
+ style: {
4380
+ fontSize: theme2.fontSizes[1],
4381
+ color: theme2.colors.textSecondary,
4382
+ background: theme2.colors.backgroundSecondary,
4383
+ padding: "4px 10px",
4384
+ borderRadius: theme2.radii[1]
4385
+ },
4386
+ children: [
4387
+ filteredSkills.length,
4388
+ " ",
4389
+ filteredSkills.length === 1 ? "skill" : "skills"
4390
+ ]
4391
+ }
4392
+ )
4393
+ ] }),
4394
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: "12px", flex: "1 1 200px", maxWidth: "400px" }, children: [
4395
+ /* @__PURE__ */ jsxs(
4396
+ "div",
4397
+ {
4398
+ style: {
4399
+ position: "relative",
4400
+ flex: 1,
4401
+ minWidth: "150px"
4402
+ },
4403
+ children: [
4404
+ /* @__PURE__ */ jsx(
4405
+ Search,
4406
+ {
4407
+ size: 16,
4408
+ color: theme2.colors.textSecondary,
4409
+ style: {
4410
+ position: "absolute",
4411
+ left: "10px",
4412
+ top: "50%",
4413
+ transform: "translateY(-50%)",
4414
+ pointerEvents: "none"
4415
+ }
4416
+ }
4417
+ ),
4418
+ /* @__PURE__ */ jsx(
4419
+ "input",
4420
+ {
4421
+ type: "text",
4422
+ placeholder: "Search global skills...",
4423
+ value: searchQuery,
4424
+ onChange: (e) => setSearchQuery(e.target.value),
4425
+ style: {
4426
+ width: "100%",
4427
+ padding: "8px 32px 8px 32px",
4428
+ fontSize: theme2.fontSizes[1],
4429
+ fontFamily: theme2.fonts.body,
4430
+ border: `1px solid ${theme2.colors.border}`,
4431
+ borderRadius: theme2.radii[2],
4432
+ background: theme2.colors.backgroundSecondary,
4433
+ color: theme2.colors.text,
4434
+ outline: "none",
4435
+ boxSizing: "border-box"
4436
+ }
4437
+ }
4438
+ ),
4439
+ searchQuery && /* @__PURE__ */ jsx(
4440
+ "button",
4441
+ {
4442
+ onClick: () => setSearchQuery(""),
4443
+ style: {
4444
+ position: "absolute",
4445
+ right: "6px",
4446
+ top: "50%",
4447
+ transform: "translateY(-50%)",
4448
+ background: "transparent",
4449
+ border: "none",
4450
+ padding: "4px",
4451
+ cursor: "pointer",
4452
+ display: "flex",
4453
+ alignItems: "center",
4454
+ justifyContent: "center",
4455
+ color: theme2.colors.textSecondary
4456
+ },
4457
+ "aria-label": "Clear search",
4458
+ children: /* @__PURE__ */ jsx(X, { size: 14 })
4459
+ }
4460
+ )
4461
+ ]
4462
+ }
4463
+ ),
4464
+ supportsRefresh && /* @__PURE__ */ jsx(
4465
+ "button",
4466
+ {
4467
+ onClick: handleRefresh,
4468
+ disabled: isRefreshing || isLoading,
4469
+ style: {
4470
+ background: theme2.colors.backgroundSecondary,
4471
+ border: `1px solid ${theme2.colors.border}`,
4472
+ borderRadius: theme2.radii[1],
4473
+ padding: "8px",
4474
+ cursor: isRefreshing || isLoading ? "default" : "pointer",
4475
+ display: "flex",
4476
+ alignItems: "center",
4477
+ justifyContent: "center",
4478
+ transition: "all 0.2s ease"
4479
+ },
4480
+ title: "Refresh skills",
4481
+ children: /* @__PURE__ */ jsx(
4482
+ RefreshCw,
4483
+ {
4484
+ size: 16,
4485
+ color: theme2.colors.textSecondary,
4486
+ style: {
4487
+ animation: isRefreshing ? "spin 1s linear infinite" : "none"
4488
+ }
4489
+ }
4490
+ )
4491
+ }
4492
+ )
4493
+ ] })
4494
+ ]
4495
+ }
4496
+ ),
4497
+ error && /* @__PURE__ */ jsxs(
4498
+ "div",
4499
+ {
4500
+ style: {
4501
+ flexShrink: 0,
4502
+ padding: "12px",
4503
+ background: `${theme2.colors.error}20`,
4504
+ border: `1px solid ${theme2.colors.error}`,
4505
+ borderRadius: theme2.radii[2],
4506
+ display: "flex",
4507
+ alignItems: "center",
4508
+ gap: "8px",
4509
+ color: theme2.colors.error,
4510
+ fontSize: theme2.fontSizes[1]
4511
+ },
4512
+ children: [
4513
+ /* @__PURE__ */ jsx(CircleAlert, { size: 16 }),
4514
+ /* @__PURE__ */ jsx("span", { children: error })
4515
+ ]
4516
+ }
4517
+ ),
4518
+ /* @__PURE__ */ jsx(
4519
+ "div",
4520
+ {
4521
+ style: {
4522
+ flex: 1,
4523
+ overflowY: "auto",
4524
+ minHeight: 0
4525
+ },
4526
+ children: isLoading ? /* @__PURE__ */ jsx(
4527
+ "div",
4528
+ {
4529
+ style: {
4530
+ height: "100%",
4531
+ display: "flex",
4532
+ alignItems: "center",
4533
+ justifyContent: "center",
4534
+ color: theme2.colors.textSecondary,
4535
+ fontSize: theme2.fontSizes[2]
4536
+ },
4537
+ children: "Loading global skills..."
4538
+ }
4539
+ ) : filteredSkills.length === 0 ? /* @__PURE__ */ jsxs(
4540
+ "div",
4541
+ {
4542
+ style: {
4543
+ height: "100%",
4544
+ display: "flex",
4545
+ flexDirection: "column",
4546
+ alignItems: "center",
4547
+ justifyContent: "center",
4548
+ gap: "16px",
4549
+ color: theme2.colors.textSecondary,
4550
+ padding: "24px"
4551
+ },
4552
+ children: [
4553
+ /* @__PURE__ */ jsx(FileCode, { size: 48, color: theme2.colors.border }),
4554
+ /* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
4555
+ /* @__PURE__ */ jsx("p", { style: { margin: 0, fontSize: theme2.fontSizes[2] }, children: searchQuery ? "No global skills match your search" : "No global skills found" }),
4556
+ /* @__PURE__ */ jsx("p", { style: { margin: "8px 0 0 0", fontSize: theme2.fontSizes[1] }, children: searchQuery ? "Try a different search term" : "Install skills from repositories to see them here" })
4557
+ ] })
4558
+ ]
4559
+ }
4560
+ ) : /* @__PURE__ */ jsx(
4561
+ "div",
4562
+ {
4563
+ style: {
4564
+ display: "grid",
4565
+ gridTemplateColumns: "repeat(auto-fill, minmax(250px, 1fr))",
4566
+ gap: "16px",
4567
+ padding: "4px"
4568
+ },
4569
+ children: filteredSkills.map((skill) => /* @__PURE__ */ jsx(
4570
+ SkillCard,
4571
+ {
4572
+ skill,
4573
+ onClick: handleSkillClick,
4574
+ isSelected: selectedSkillId === skill.id,
4575
+ filterContext: "global"
4576
+ },
4577
+ skill.id
4578
+ ))
4579
+ }
4580
+ )
4581
+ }
4582
+ ),
4583
+ /* @__PURE__ */ jsx("style", { children: `
4584
+ @keyframes spin {
4585
+ to { transform: rotate(360deg); }
4586
+ }
4587
+ ` })
4588
+ ]
4589
+ }
4590
+ );
4591
+ };
4240
4592
  var MarkdownSourceType$1;
4241
4593
  ((MarkdownSourceType2) => {
4242
4594
  MarkdownSourceType2["WORKSPACE_FILE"] = "workspace_file";
@@ -52214,6 +52566,31 @@ const panels = [
52214
52566
  console.log("Skills Browse Panel unmounting");
52215
52567
  }
52216
52568
  },
52569
+ {
52570
+ metadata: {
52571
+ id: "industry-theme.global-skills",
52572
+ name: "Global Skills",
52573
+ icon: "🌐",
52574
+ version: "0.1.0",
52575
+ author: "Principal ADE",
52576
+ description: "Display only global Agent Skills (no project skills)",
52577
+ slices: ["fileTree", "globalSkills"]
52578
+ // Depends on fileTree and globalSkills
52579
+ },
52580
+ component: GlobalSkillsPanel,
52581
+ // Optional: Called when this specific panel is mounted
52582
+ onMount: async (context) => {
52583
+ var _a;
52584
+ console.log(
52585
+ "Global Skills Panel mounted",
52586
+ (_a = context.currentScope.repository) == null ? void 0 : _a.path
52587
+ );
52588
+ },
52589
+ // Optional: Called when this specific panel is unmounted
52590
+ onUnmount: async (_context) => {
52591
+ console.log("Global Skills Panel unmounting");
52592
+ }
52593
+ },
52217
52594
  {
52218
52595
  metadata: {
52219
52596
  id: "industry-theme.skill-detail",
@@ -52323,6 +52700,7 @@ const onPackageUnload = async () => {
52323
52700
  };
52324
52701
  export {
52325
52702
  AgenticResourcesPanel,
52703
+ GlobalSkillsPanel,
52326
52704
  SkillsBrowsePanel,
52327
52705
  onPackageLoad,
52328
52706
  onPackageUnload,