@industry-theme/agent-panels 0.2.12 → 0.2.13

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.
@@ -1 +1 @@
1
- {"version":3,"file":"SkillDetailPanel.d.ts","sourceRoot":"","sources":["../../src/panels/SkillDetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAQpD,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CA0S5D,CAAC"}
1
+ {"version":3,"file":"SkillDetailPanel.d.ts","sourceRoot":"","sources":["../../src/panels/SkillDetailPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAsC,MAAM,OAAO,CAAC;AAC3D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAQpD,OAAO,wBAAwB,CAAC;AAEhC,MAAM,WAAW,qBAAsB,SAAQ,mBAAmB;IAChE;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACjC;AAED,eAAO,MAAM,gBAAgB,EAAE,KAAK,CAAC,EAAE,CAAC,qBAAqB,CAyT5D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SkillCard.d.ts","sourceRoot":"","sources":["../../../../src/panels/skills/components/SkillCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,wBAAwB,CAAC;AAEjE,UAAU,cAAc;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAkDD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CAyS9C,CAAC"}
1
+ {"version":3,"file":"SkillCard.d.ts","sourceRoot":"","sources":["../../../../src/panels/skills/components/SkillCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,KAAK,EAAE,KAAK,EAAe,MAAM,wBAAwB,CAAC;AAEjE,UAAU,cAAc;IACtB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAkDD;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,cAAc,CA+S9C,CAAC"}
@@ -11,6 +11,12 @@ export interface SkillMetadata {
11
11
  sha?: string;
12
12
  files?: string[];
13
13
  }
14
+ export interface FrontmatterValidation {
15
+ isValid: boolean;
16
+ hasStructure: boolean;
17
+ missingFields: string[];
18
+ errorMessage?: string;
19
+ }
14
20
  export interface Skill {
15
21
  id: string;
16
22
  name: string;
@@ -28,7 +34,7 @@ export interface Skill {
28
34
  source: SkillSource;
29
35
  priority: 1 | 2 | 3 | 4 | 5;
30
36
  metadata?: SkillMetadata;
31
- hasFrontmatter: boolean;
37
+ frontmatterValidation: FrontmatterValidation;
32
38
  }
33
39
  /**
34
40
  * Global skills data provided by the host application
@@ -1 +1 @@
1
- {"version":3,"file":"useSkillsData.d.ts","sourceRoot":"","sources":["../../../../src/panels/skills/hooks/useSkillsData.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,eAAe,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,cAAc,EAAE,OAAO,CAAC;CACzB;AAKD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAsND;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,cAE3B,mBAAmB,KAAG,mBAiHxB,CAAC"}
1
+ {"version":3,"file":"useSkillsData.d.ts","sourceRoot":"","sources":["../../../../src/panels/skills/hooks/useSkillsData.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,MAAM,WAAW,GACnB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,GAChB,eAAe,GACf,eAAe,CAAC;AAEpB,MAAM,WAAW,aAAa;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,KAAK;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IAExB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;IACvB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAEtB,MAAM,EAAE,WAAW,CAAC;IACpB,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAE5B,QAAQ,CAAC,EAAE,aAAa,CAAC;IAEzB,qBAAqB,EAAE,qBAAqB,CAAC;CAC9C;AAKD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAED,UAAU,mBAAmB;IAC3B,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED,UAAU,mBAAmB;IAC3B,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,aAAa,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CACpC;AAiQD;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,cAE3B,mBAAmB,KAAG,mBAiHxB,CAAC"}
@@ -2616,10 +2616,15 @@ const analyzeSkillStructure = (fileTree, skillPath) => {
2616
2616
  assetFiles
2617
2617
  };
2618
2618
  };
2619
- const hasFrontmatterYAML = (content2) => {
2619
+ const validateFrontmatter = (content2) => {
2620
2620
  const trimmedContent = content2.trim();
2621
2621
  if (!trimmedContent.startsWith("---")) {
2622
- return false;
2622
+ return {
2623
+ isValid: false,
2624
+ hasStructure: false,
2625
+ missingFields: [],
2626
+ errorMessage: "Missing YAML frontmatter (must start with ---)"
2627
+ };
2623
2628
  }
2624
2629
  const lines = trimmedContent.split("\n");
2625
2630
  let frontmatterEnd = -1;
@@ -2629,7 +2634,36 @@ const hasFrontmatterYAML = (content2) => {
2629
2634
  break;
2630
2635
  }
2631
2636
  }
2632
- return frontmatterEnd > 0;
2637
+ if (frontmatterEnd <= 0) {
2638
+ return {
2639
+ isValid: false,
2640
+ hasStructure: false,
2641
+ missingFields: [],
2642
+ errorMessage: "Missing closing --- delimiter for frontmatter"
2643
+ };
2644
+ }
2645
+ const frontmatterLines = lines.slice(1, frontmatterEnd);
2646
+ const frontmatterText = frontmatterLines.join("\n");
2647
+ const missingFields = [];
2648
+ const hasName = /^name:\s*.+/m.test(frontmatterText);
2649
+ const hasDescription = /^description:\s*.+/m.test(frontmatterText);
2650
+ if (!hasName) {
2651
+ missingFields.push("name");
2652
+ }
2653
+ if (!hasDescription) {
2654
+ missingFields.push("description");
2655
+ }
2656
+ let errorMessage;
2657
+ if (missingFields.length > 0) {
2658
+ const fieldList = missingFields.map((f) => `'${f}'`).join(", ");
2659
+ errorMessage = `Missing required field${missingFields.length > 1 ? "s" : ""}: ${fieldList}`;
2660
+ }
2661
+ return {
2662
+ isValid: missingFields.length === 0,
2663
+ hasStructure: true,
2664
+ missingFields,
2665
+ errorMessage
2666
+ };
2633
2667
  };
2634
2668
  const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter, isBrowserMode = false) => {
2635
2669
  const pathParts = path2.split("/");
@@ -2670,7 +2704,7 @@ const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter, i
2670
2704
  console.debug("[useSkillsData] No metadata file for skill:", skillDirName);
2671
2705
  }
2672
2706
  }
2673
- const hasFrontmatter = hasFrontmatterYAML(content2);
2707
+ const frontmatterValidation = validateFrontmatter(content2);
2674
2708
  return {
2675
2709
  id: path2,
2676
2710
  name: skillDirName.replace(/-/g, " ").replace(/_/g, " "),
@@ -2683,7 +2717,7 @@ const parseSkillContent = async (content2, path2, fileTree, fileSystemAdapter, i
2683
2717
  source: source2,
2684
2718
  priority,
2685
2719
  metadata,
2686
- hasFrontmatter
2720
+ frontmatterValidation
2687
2721
  };
2688
2722
  };
2689
2723
  const useSkillsData = ({
@@ -2934,7 +2968,7 @@ Installed: ${skill.metadata.installedAt ? new Date(skill.metadata.installedAt).t
2934
2968
  ]
2935
2969
  }
2936
2970
  ),
2937
- !skill.hasFrontmatter && /* @__PURE__ */ jsxs(
2971
+ !skill.frontmatterValidation.isValid && /* @__PURE__ */ jsxs(
2938
2972
  "div",
2939
2973
  {
2940
2974
  style: {
@@ -2951,10 +2985,10 @@ Installed: ${skill.metadata.installedAt ? new Date(skill.metadata.installedAt).t
2951
2985
  fontWeight: 500,
2952
2986
  width: "fit-content"
2953
2987
  },
2954
- title: "This skill is missing YAML frontmatter metadata",
2988
+ title: skill.frontmatterValidation.errorMessage || "Invalid frontmatter",
2955
2989
  children: [
2956
2990
  /* @__PURE__ */ jsx(TriangleAlert, { size: 10 }),
2957
- /* @__PURE__ */ jsx("span", { children: "No Frontmatter" })
2991
+ /* @__PURE__ */ jsx("span", { children: skill.frontmatterValidation.hasStructure ? skill.frontmatterValidation.missingFields.length > 0 ? `Missing: ${skill.frontmatterValidation.missingFields.join(", ")}` : "Invalid Frontmatter" : "No Frontmatter" })
2958
2992
  ]
2959
2993
  }
2960
2994
  )
@@ -48181,7 +48215,7 @@ const SkillDetailPanel = ({
48181
48215
  ]
48182
48216
  }
48183
48217
  ),
48184
- !skill.hasFrontmatter && /* @__PURE__ */ jsxs(
48218
+ !skill.frontmatterValidation.isValid && /* @__PURE__ */ jsxs(
48185
48219
  "div",
48186
48220
  {
48187
48221
  style: {
@@ -48207,10 +48241,10 @@ const SkillDetailPanel = ({
48207
48241
  fontWeight: theme2.fontWeights.semibold,
48208
48242
  marginBottom: "0.25rem"
48209
48243
  },
48210
- children: "Missing YAML Frontmatter"
48244
+ children: "Invalid Skill Frontmatter"
48211
48245
  }
48212
48246
  ),
48213
- /* @__PURE__ */ jsx(
48247
+ /* @__PURE__ */ jsxs(
48214
48248
  "div",
48215
48249
  {
48216
48250
  style: {
@@ -48219,7 +48253,25 @@ const SkillDetailPanel = ({
48219
48253
  fontFamily: theme2.fonts.body,
48220
48254
  lineHeight: "1.5"
48221
48255
  },
48222
- 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."
48256
+ children: [
48257
+ skill.frontmatterValidation.errorMessage || "This skill has invalid frontmatter metadata.",
48258
+ skill.frontmatterValidation.missingFields.length > 0 && /* @__PURE__ */ jsxs("div", { style: { marginTop: "0.5rem" }, children: [
48259
+ "Required fields: ",
48260
+ /* @__PURE__ */ jsx("code", { style: {
48261
+ padding: "2px 4px",
48262
+ backgroundColor: "#f59e0b20",
48263
+ borderRadius: "3px",
48264
+ fontSize: theme2.fontSizes[0]
48265
+ }, children: "name" }),
48266
+ ", ",
48267
+ /* @__PURE__ */ jsx("code", { style: {
48268
+ padding: "2px 4px",
48269
+ backgroundColor: "#f59e0b20",
48270
+ borderRadius: "3px",
48271
+ fontSize: theme2.fontSizes[0]
48272
+ }, children: "description" })
48273
+ ] })
48274
+ ]
48223
48275
  }
48224
48276
  )
48225
48277
  ] })