agdex 0.4.2 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/README.md +42 -5
  2. package/dist/cli/configurable-select.d.ts +15 -0
  3. package/dist/cli/configurable-select.d.ts.map +1 -0
  4. package/dist/cli/index.js +453 -107
  5. package/dist/{index-2hm5b6yq.js → index-thmt54kg.js} +261 -70
  6. package/dist/index.d.ts +1 -1
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +3 -1
  9. package/dist/lib/agents-md.d.ts +5 -0
  10. package/dist/lib/agents-md.d.ts.map +1 -1
  11. package/dist/lib/providers/cuda-feedstock.d.ts +6 -0
  12. package/dist/lib/providers/cuda-feedstock.d.ts.map +1 -0
  13. package/dist/lib/providers/generic.d.ts +2 -0
  14. package/dist/lib/providers/generic.d.ts.map +1 -1
  15. package/dist/lib/providers/index.d.ts +3 -0
  16. package/dist/lib/providers/index.d.ts.map +1 -1
  17. package/dist/lib/providers/nextjs.d.ts.map +1 -1
  18. package/dist/lib/providers/shadcn-svelte.d.ts +3 -0
  19. package/dist/lib/providers/shadcn-svelte.d.ts.map +1 -0
  20. package/dist/lib/providers/sveltekit.d.ts +3 -0
  21. package/dist/lib/providers/sveltekit.d.ts.map +1 -0
  22. package/dist/lib/skills.d.ts +13 -2
  23. package/dist/lib/skills.d.ts.map +1 -1
  24. package/dist/lib/types.d.ts +20 -3
  25. package/dist/lib/types.d.ts.map +1 -1
  26. package/package.json +1 -1
  27. package/dist/index-4shp3mqh.js +0 -1871
  28. package/dist/index-57bfejpe.js +0 -1357
  29. package/dist/index-5h59833k.js +0 -1270
  30. package/dist/index-6dj5che8.js +0 -859
  31. package/dist/index-6e18afd7.js +0 -1229
  32. package/dist/index-7adbtddf.js +0 -1123
  33. package/dist/index-9gy9s47s.js +0 -1366
  34. package/dist/index-cfpc7eqp.js +0 -1265
  35. package/dist/index-db6kreh4.js +0 -1188
  36. package/dist/index-exr11by8.js +0 -708
  37. package/dist/index-fxmpwsct.js +0 -779
  38. package/dist/index-gtzz9131.js +0 -708
  39. package/dist/index-hr5jh9yq.js +0 -712
  40. package/dist/index-k299aha0.js +0 -1229
  41. package/dist/index-ntpyfcve.js +0 -1154
  42. package/dist/index-p0xjkwcp.js +0 -1283
  43. package/dist/index-pkx4s2ef.js +0 -2100
  44. package/dist/index-pry8ssn1.js +0 -636
  45. package/dist/index-wgnqr8g3.js +0 -882
  46. package/dist/index-y6zqcrbh.js +0 -788
  47. package/dist/index-zrmn6fd2.js +0 -1903
@@ -40,17 +40,12 @@ async function pullDocs(provider, options) {
40
40
  } else if (provider.detectVersion) {
41
41
  const versionResult = provider.detectVersion(cwd);
42
42
  if (!versionResult.version) {
43
- return {
44
- success: false,
45
- error: versionResult.error || `Could not detect ${provider.displayName} version`
46
- };
43
+ version = provider.defaultBranch || "main";
44
+ } else {
45
+ version = versionResult.version;
47
46
  }
48
- version = versionResult.version;
49
47
  } else {
50
- return {
51
- success: false,
52
- error: `No version provided and ${provider.displayName} does not support auto-detection`
53
- };
48
+ version = provider.defaultBranch || "main";
54
49
  }
55
50
  const docsPath = docsDir ?? fs.mkdtempSync(path.join(os.tmpdir(), "agdex-"));
56
51
  const useTempDir = !docsDir;
@@ -253,6 +248,15 @@ function hasExistingIndex(content, providerName) {
253
248
  }
254
249
  return content.includes(START_MARKER_PREFIX);
255
250
  }
251
+ function getEmbeddedProviders(content) {
252
+ const providers = [];
253
+ const regex = /<!-- AGENTS-MD-EMBED-START:(\S+?) -->/g;
254
+ let match;
255
+ while ((match = regex.exec(content)) !== null) {
256
+ providers.push(match[1]);
257
+ }
258
+ return providers;
259
+ }
256
260
  function removeDocsIndex(content, providerName) {
257
261
  if (!hasExistingIndex(content, providerName)) {
258
262
  return content;
@@ -351,7 +355,7 @@ async function embed(options) {
351
355
  version,
352
356
  output = "AGENTS.md",
353
357
  docsDir: customDocsDir,
354
- globalCache = false,
358
+ globalCache = true,
355
359
  description
356
360
  } = options;
357
361
  let docsPath;
@@ -380,24 +384,39 @@ async function embed(options) {
380
384
  sizeBefore = Buffer.byteLength(existingContent, "utf-8");
381
385
  isNewFile = false;
382
386
  }
383
- const pullResult = await pullDocs(provider, {
384
- cwd,
385
- version,
386
- docsDir: docsPath
387
- });
388
- if (!pullResult.success) {
389
- return {
390
- success: false,
391
- error: pullResult.error
387
+ const cacheHit = fs.existsSync(docsPath) && fs.readdirSync(docsPath).length > 0;
388
+ let pullResult;
389
+ if (cacheHit) {
390
+ let resolvedVersion = version;
391
+ if (!resolvedVersion && provider.detectVersion) {
392
+ const detected = provider.detectVersion(cwd);
393
+ resolvedVersion = detected.version || undefined;
394
+ }
395
+ pullResult = {
396
+ success: true,
397
+ docsPath,
398
+ version: resolvedVersion
392
399
  };
400
+ } else {
401
+ pullResult = await pullDocs(provider, {
402
+ cwd,
403
+ version,
404
+ docsDir: docsPath
405
+ });
406
+ if (!pullResult.success) {
407
+ return {
408
+ success: false,
409
+ error: pullResult.error
410
+ };
411
+ }
393
412
  }
394
413
  const docFiles = collectDocFiles(docsPath, {
395
414
  extensions: provider.extensions,
396
415
  excludePatterns: provider.excludePatterns
397
416
  });
398
417
  const sections = buildDocTree(docFiles);
399
- const globalFlag = globalCache ? " --global" : "";
400
- const regenerateCommand = `npx agdex --provider ${provider.name} --output ${output}${globalFlag}`;
418
+ const localFlag = !globalCache ? " --local" : "";
419
+ const regenerateCommand = `npx agdex --provider ${provider.name} --output ${output}${localFlag}`;
401
420
  const indexContent = generateIndex({
402
421
  docsPath: docsLinkPath,
403
422
  sections,
@@ -426,7 +445,8 @@ async function embed(options) {
426
445
  sizeBefore,
427
446
  sizeAfter,
428
447
  isNewFile,
429
- gitignoreUpdated
448
+ gitignoreUpdated,
449
+ cacheHit
430
450
  };
431
451
  }
432
452
 
@@ -605,6 +625,7 @@ var nextjsProvider = {
605
625
  docsPath: "docs",
606
626
  extensions: [".mdx", ".md"],
607
627
  detectVersion,
628
+ defaultBranch: "canary",
608
629
  versionToTag: (version) => version.startsWith("v") ? version : `v${version}`,
609
630
  excludePatterns: ["**/index.mdx", "**/index.md"],
610
631
  instruction: "IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any Next.js tasks."
@@ -1607,6 +1628,7 @@ function createProvider(options) {
1607
1628
  docsPath,
1608
1629
  extensions = [".mdx", ".md"],
1609
1630
  packageName,
1631
+ defaultBranch,
1610
1632
  versionToTag = (v) => {
1611
1633
  if (v.startsWith("v") || /^\d/.test(v)) {
1612
1634
  return v.startsWith("v") ? v : `v${v}`;
@@ -1651,6 +1673,7 @@ function createProvider(options) {
1651
1673
  docsPath,
1652
1674
  extensions,
1653
1675
  detectVersion: detectVersion20,
1676
+ defaultBranch,
1654
1677
  versionToTag,
1655
1678
  excludePatterns,
1656
1679
  instruction: instruction || `IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any ${displayName} tasks.`
@@ -1667,6 +1690,105 @@ function createLocalProvider(options) {
1667
1690
  instruction: options.instruction || `IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any ${options.displayName} tasks.`
1668
1691
  };
1669
1692
  }
1693
+ // src/lib/providers/sveltekit.ts
1694
+ import fs20 from "fs";
1695
+ import path20 from "path";
1696
+ function detectVersion20(cwd) {
1697
+ const packageJsonPath = path20.join(cwd, "package.json");
1698
+ if (!fs20.existsSync(packageJsonPath)) {
1699
+ return {
1700
+ version: null,
1701
+ error: "No package.json found in the current directory"
1702
+ };
1703
+ }
1704
+ try {
1705
+ const packageJson = JSON.parse(fs20.readFileSync(packageJsonPath, "utf-8"));
1706
+ const dependencies = packageJson.dependencies || {};
1707
+ const devDependencies = packageJson.devDependencies || {};
1708
+ const kitVersion = dependencies["@sveltejs/kit"] || devDependencies["@sveltejs/kit"];
1709
+ if (kitVersion) {
1710
+ const cleanVersion = kitVersion.replace(/^[\^~>=<]+/, "");
1711
+ return { version: cleanVersion };
1712
+ }
1713
+ return {
1714
+ version: null,
1715
+ error: "@sveltejs/kit is not installed in this project."
1716
+ };
1717
+ } catch (err) {
1718
+ return {
1719
+ version: null,
1720
+ error: `Failed to parse package.json: ${err instanceof Error ? err.message : String(err)}`
1721
+ };
1722
+ }
1723
+ }
1724
+ var sveltekitProvider = {
1725
+ name: "sveltekit",
1726
+ displayName: "SvelteKit",
1727
+ repo: "sveltejs/kit",
1728
+ docsPath: "documentation/docs",
1729
+ extensions: [".md"],
1730
+ detectVersion: detectVersion20,
1731
+ versionToTag: (version) => `@sveltejs/kit@${version}`,
1732
+ excludePatterns: ["**/index.md"],
1733
+ instruction: "IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any SvelteKit tasks."
1734
+ };
1735
+ // src/lib/providers/shadcn-svelte.ts
1736
+ import fs21 from "fs";
1737
+ import path21 from "path";
1738
+ function detectVersion21(cwd) {
1739
+ const packageJsonPath = path21.join(cwd, "package.json");
1740
+ if (!fs21.existsSync(packageJsonPath)) {
1741
+ return {
1742
+ version: null,
1743
+ error: "No package.json found in the current directory"
1744
+ };
1745
+ }
1746
+ try {
1747
+ const packageJson = JSON.parse(fs21.readFileSync(packageJsonPath, "utf-8"));
1748
+ const dependencies = packageJson.dependencies || {};
1749
+ const devDependencies = packageJson.devDependencies || {};
1750
+ const version = dependencies["shadcn-svelte"] || devDependencies["shadcn-svelte"];
1751
+ if (version) {
1752
+ const cleanVersion = version.replace(/^[\^~>=<]+/, "");
1753
+ return { version: cleanVersion };
1754
+ }
1755
+ return {
1756
+ version: null,
1757
+ error: "shadcn-svelte is not installed in this project."
1758
+ };
1759
+ } catch (err) {
1760
+ return {
1761
+ version: null,
1762
+ error: `Failed to parse package.json: ${err instanceof Error ? err.message : String(err)}`
1763
+ };
1764
+ }
1765
+ }
1766
+ var shadcnSvelteProvider = {
1767
+ name: "shadcn-svelte",
1768
+ displayName: "shadcn-svelte",
1769
+ repo: "huntabyte/shadcn-svelte",
1770
+ docsPath: "docs/content",
1771
+ extensions: [".md"],
1772
+ detectVersion: detectVersion21,
1773
+ versionToTag: (version) => `shadcn-svelte@${version}`,
1774
+ excludePatterns: ["**/index.md"],
1775
+ instruction: "IMPORTANT: Prefer retrieval-led reasoning over pre-training-led reasoning for any shadcn-svelte tasks."
1776
+ };
1777
+ // src/lib/providers/cuda-feedstock.ts
1778
+ function detectVersion22(_cwd) {
1779
+ return { version: "main" };
1780
+ }
1781
+ var cudaFeedstockProvider = {
1782
+ name: "cuda-feedstock",
1783
+ displayName: "CUDA Feedstock",
1784
+ repo: "conda-forge/cuda-feedstock",
1785
+ docsPath: "recipe",
1786
+ extensions: [".md", ".yaml"],
1787
+ detectVersion: detectVersion22,
1788
+ versionToTag: (version) => version,
1789
+ excludePatterns: [],
1790
+ instruction: "This should be used when building and running CUDA packages with rattler-build, conda-forge, pixi."
1791
+ };
1670
1792
  // src/lib/providers/index.ts
1671
1793
  function getProvider(preset) {
1672
1794
  switch (preset) {
@@ -1686,6 +1808,10 @@ function getProvider(preset) {
1686
1808
  return bunProvider;
1687
1809
  case "svelte":
1688
1810
  return svelteProvider;
1811
+ case "sveltekit":
1812
+ return sveltekitProvider;
1813
+ case "shadcn-svelte":
1814
+ return shadcnSvelteProvider;
1689
1815
  case "tailwind":
1690
1816
  return tailwindProvider;
1691
1817
  case "ruff":
@@ -1708,6 +1834,8 @@ function getProvider(preset) {
1708
1834
  return ffmpegProvider;
1709
1835
  case "manim":
1710
1836
  return manimProvider;
1837
+ case "cuda-feedstock":
1838
+ return cudaFeedstockProvider;
1711
1839
  case "vue":
1712
1840
  case "astro":
1713
1841
  return null;
@@ -1716,23 +1844,33 @@ function getProvider(preset) {
1716
1844
  }
1717
1845
  }
1718
1846
  function listProviders() {
1719
- return ["nextjs", "react", "pixi", "rattler-build", "tauri", "conda-forge", "bun", "vue", "svelte", "astro", "tailwind", "ruff", "ty", "basedpyright", "convex", "polars", "delta-rs", "obsidian", "obsidian-excalidraw", "ffmpeg", "manim"];
1847
+ return ["nextjs", "react", "pixi", "rattler-build", "tauri", "conda-forge", "bun", "vue", "svelte", "sveltekit", "shadcn-svelte", "astro", "tailwind", "ruff", "ty", "basedpyright", "convex", "polars", "delta-rs", "obsidian", "obsidian-excalidraw", "ffmpeg", "manim", "cuda-feedstock"];
1720
1848
  }
1721
1849
  function isProviderAvailable(preset) {
1722
1850
  return getProvider(preset) !== null;
1723
1851
  }
1724
1852
 
1725
1853
  // src/lib/skills.ts
1726
- import fs20 from "fs";
1727
- import path20 from "path";
1854
+ import fs22 from "fs";
1855
+ import path22 from "path";
1728
1856
  import os2 from "os";
1729
1857
  var SKILLS_START_MARKER = "<!-- AGENTS-MD-SKILLS-START -->";
1730
1858
  var SKILLS_END_MARKER = "<!-- AGENTS-MD-SKILLS-END -->";
1859
+ var SKILLS_SH_API_BASE = "https://skills.sh";
1860
+ async function fetchSkillsShSearch(query, limit = 20) {
1861
+ const url = `${SKILLS_SH_API_BASE}/api/search?q=${encodeURIComponent(query)}&limit=${limit}`;
1862
+ const response = await fetch(url);
1863
+ if (!response.ok) {
1864
+ throw new Error(`skills.sh API returned ${response.status}`);
1865
+ }
1866
+ const data = await response.json();
1867
+ return data.skills;
1868
+ }
1731
1869
  function parseEnabledPlugins(settingsPath) {
1732
- if (!fs20.existsSync(settingsPath))
1870
+ if (!fs22.existsSync(settingsPath))
1733
1871
  return [];
1734
1872
  try {
1735
- const content = fs20.readFileSync(settingsPath, "utf-8");
1873
+ const content = fs22.readFileSync(settingsPath, "utf-8");
1736
1874
  const settings = JSON.parse(content);
1737
1875
  const enabledPlugins = settings.enabledPlugins || {};
1738
1876
  const plugins = [];
@@ -1753,17 +1891,17 @@ function parseEnabledPlugins(settingsPath) {
1753
1891
  }
1754
1892
  }
1755
1893
  function findPluginSkillsPath(pluginRepo, skillName) {
1756
- const cacheDir = path20.join(os2.homedir(), ".claude", "plugins", "cache", pluginRepo, skillName);
1757
- if (!fs20.existsSync(cacheDir))
1894
+ const cacheDir = path22.join(os2.homedir(), ".claude", "plugins", "cache", pluginRepo, skillName);
1895
+ if (!fs22.existsSync(cacheDir))
1758
1896
  return null;
1759
1897
  try {
1760
- const entries = fs20.readdirSync(cacheDir, { withFileTypes: true });
1898
+ const entries = fs22.readdirSync(cacheDir, { withFileTypes: true });
1761
1899
  const hashDirs = entries.filter((e) => e.isDirectory() && !e.name.startsWith("."));
1762
1900
  if (hashDirs.length === 0)
1763
1901
  return null;
1764
1902
  const hashDir = hashDirs[0].name;
1765
- const skillsPath = path20.join(cacheDir, hashDir, "skills");
1766
- if (fs20.existsSync(skillsPath)) {
1903
+ const skillsPath = path22.join(cacheDir, hashDir, "skills");
1904
+ if (fs22.existsSync(skillsPath)) {
1767
1905
  return skillsPath;
1768
1906
  }
1769
1907
  return null;
@@ -1775,8 +1913,8 @@ function getEnabledPluginSources(cwd) {
1775
1913
  const sources = [];
1776
1914
  const seenPlugins = new Set;
1777
1915
  const settingsPaths = [
1778
- path20.join(os2.homedir(), ".claude", "settings.json"),
1779
- path20.join(cwd, ".claude", "settings.json")
1916
+ path22.join(os2.homedir(), ".claude", "settings.json"),
1917
+ path22.join(cwd, ".claude", "settings.json")
1780
1918
  ];
1781
1919
  for (const settingsPath of settingsPaths) {
1782
1920
  const plugins = parseEnabledPlugins(settingsPath);
@@ -1819,12 +1957,12 @@ function parseSkillFrontmatter(content) {
1819
1957
  function getFilesRecursively(dir, baseDir) {
1820
1958
  const files = [];
1821
1959
  try {
1822
- const entries = fs20.readdirSync(dir, { withFileTypes: true });
1960
+ const entries = fs22.readdirSync(dir, { withFileTypes: true });
1823
1961
  for (const entry of entries) {
1824
1962
  if (entry.name.startsWith(".") || entry.name === "SKILL.md")
1825
1963
  continue;
1826
- const fullPath = path20.join(dir, entry.name);
1827
- const relativePath = path20.relative(baseDir, fullPath);
1964
+ const fullPath = path22.join(dir, entry.name);
1965
+ const relativePath = path22.relative(baseDir, fullPath);
1828
1966
  if (entry.isDirectory()) {
1829
1967
  files.push(...getFilesRecursively(fullPath, baseDir));
1830
1968
  } else {
@@ -1835,29 +1973,29 @@ function getFilesRecursively(dir, baseDir) {
1835
1973
  return files;
1836
1974
  }
1837
1975
  function getSiblingFiles(skillMdPath) {
1838
- const dir = path20.dirname(skillMdPath);
1839
- if (!fs20.existsSync(dir))
1976
+ const dir = path22.dirname(skillMdPath);
1977
+ if (!fs22.existsSync(dir))
1840
1978
  return [];
1841
1979
  return getFilesRecursively(dir, dir).sort();
1842
1980
  }
1843
1981
  function discoverPluginSkills(pluginsPath, label) {
1844
1982
  const skills = [];
1845
- const pluginsDir = path20.join(pluginsPath, "plugins");
1846
- if (!fs20.existsSync(pluginsDir)) {
1983
+ const pluginsDir = path22.join(pluginsPath, "plugins");
1984
+ if (!fs22.existsSync(pluginsDir)) {
1847
1985
  return skills;
1848
1986
  }
1849
- const plugins = fs20.readdirSync(pluginsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
1987
+ const plugins = fs22.readdirSync(pluginsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
1850
1988
  for (const plugin of plugins) {
1851
- const skillsDir = path20.join(pluginsDir, plugin.name, "skills");
1852
- if (!fs20.existsSync(skillsDir))
1989
+ const skillsDir = path22.join(pluginsDir, plugin.name, "skills");
1990
+ if (!fs22.existsSync(skillsDir))
1853
1991
  continue;
1854
- const skillDirs = fs20.readdirSync(skillsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
1992
+ const skillDirs = fs22.readdirSync(skillsDir, { withFileTypes: true }).filter((d) => d.isDirectory());
1855
1993
  for (const skillDir of skillDirs) {
1856
- const skillMdPath = path20.join(skillsDir, skillDir.name, "SKILL.md");
1857
- if (!fs20.existsSync(skillMdPath))
1994
+ const skillMdPath = path22.join(skillsDir, skillDir.name, "SKILL.md");
1995
+ if (!fs22.existsSync(skillMdPath))
1858
1996
  continue;
1859
1997
  try {
1860
- const content = fs20.readFileSync(skillMdPath, "utf-8");
1998
+ const content = fs22.readFileSync(skillMdPath, "utf-8");
1861
1999
  const frontmatter = parseSkillFrontmatter(content);
1862
2000
  if (!frontmatter)
1863
2001
  continue;
@@ -1876,16 +2014,16 @@ function discoverPluginSkills(pluginsPath, label) {
1876
2014
  }
1877
2015
  function discoverFlatSkills(skillsPath, source, label) {
1878
2016
  const skills = [];
1879
- if (!fs20.existsSync(skillsPath)) {
2017
+ if (!fs22.existsSync(skillsPath)) {
1880
2018
  return skills;
1881
2019
  }
1882
- const skillDirs = fs20.readdirSync(skillsPath, { withFileTypes: true }).filter((d) => d.isDirectory());
2020
+ const skillDirs = fs22.readdirSync(skillsPath, { withFileTypes: true }).filter((d) => d.isDirectory());
1883
2021
  for (const skillDir of skillDirs) {
1884
- const skillMdPath = path20.join(skillsPath, skillDir.name, "SKILL.md");
1885
- if (!fs20.existsSync(skillMdPath))
2022
+ const skillMdPath = path22.join(skillsPath, skillDir.name, "SKILL.md");
2023
+ if (!fs22.existsSync(skillMdPath))
1886
2024
  continue;
1887
2025
  try {
1888
- const content = fs20.readFileSync(skillMdPath, "utf-8");
2026
+ const content = fs22.readFileSync(skillMdPath, "utf-8");
1889
2027
  const frontmatter = parseSkillFrontmatter(content);
1890
2028
  if (!frontmatter)
1891
2029
  continue;
@@ -1900,6 +2038,49 @@ function discoverFlatSkills(skillsPath, source, label) {
1900
2038
  }
1901
2039
  return skills;
1902
2040
  }
2041
+ function discoverSkillsShRepo(repoDir, repoName) {
2042
+ const skills = [];
2043
+ const seen = new Set;
2044
+ const searchDirs = [
2045
+ "skills",
2046
+ ".claude/skills",
2047
+ ".agents/skills",
2048
+ "skills/.curated",
2049
+ "skills/.experimental"
2050
+ ];
2051
+ const rootSkillMd = path22.join(repoDir, "SKILL.md");
2052
+ if (fs22.existsSync(rootSkillMd)) {
2053
+ try {
2054
+ const content = fs22.readFileSync(rootSkillMd, "utf-8");
2055
+ const frontmatter = parseSkillFrontmatter(content);
2056
+ if (frontmatter) {
2057
+ seen.add(frontmatter.name);
2058
+ skills.push({
2059
+ name: frontmatter.name,
2060
+ description: frontmatter.description,
2061
+ skillMdPath: rootSkillMd,
2062
+ siblingFiles: getSiblingFiles(rootSkillMd),
2063
+ source: "skills-sh",
2064
+ pluginName: repoName
2065
+ });
2066
+ }
2067
+ } catch {}
2068
+ }
2069
+ for (const dir of searchDirs) {
2070
+ const fullDir = path22.join(repoDir, dir);
2071
+ if (!fs22.existsSync(fullDir))
2072
+ continue;
2073
+ const discovered = discoverFlatSkills(fullDir, "skills-sh", repoName);
2074
+ for (const skill of discovered) {
2075
+ if (!seen.has(skill.name)) {
2076
+ seen.add(skill.name);
2077
+ skill.pluginName = repoName;
2078
+ skills.push(skill);
2079
+ }
2080
+ }
2081
+ }
2082
+ return skills;
2083
+ }
1903
2084
  function collectAllSkills(sources) {
1904
2085
  const allSkills = [];
1905
2086
  for (const source of sources) {
@@ -1923,6 +2104,7 @@ function collectAllSkills(sources) {
1923
2104
  function generateSkillsIndex(skills, options = {}) {
1924
2105
  const parts = ["[Skills Index]"];
1925
2106
  const pluginSkills = new Map;
2107
+ const skillsShSkills = new Map;
1926
2108
  const userSkills = [];
1927
2109
  const projectSkills = [];
1928
2110
  for (const skill of skills) {
@@ -1930,6 +2112,10 @@ function generateSkillsIndex(skills, options = {}) {
1930
2112
  const existing = pluginSkills.get(skill.pluginName) || [];
1931
2113
  existing.push(skill);
1932
2114
  pluginSkills.set(skill.pluginName, existing);
2115
+ } else if (skill.source === "skills-sh" && skill.pluginName) {
2116
+ const existing = skillsShSkills.get(skill.pluginName) || [];
2117
+ existing.push(skill);
2118
+ skillsShSkills.set(skill.pluginName, existing);
1933
2119
  } else if (skill.source === "user") {
1934
2120
  userSkills.push(skill);
1935
2121
  } else if (skill.source === "project") {
@@ -1940,6 +2126,10 @@ function generateSkillsIndex(skills, options = {}) {
1940
2126
  const skillParts = entries.map((s) => formatSkillEntry(s)).join(";");
1941
2127
  parts.push(`plugin:${pluginName}:{${skillParts}}`);
1942
2128
  }
2129
+ for (const [repoName, entries] of skillsShSkills) {
2130
+ const skillParts = entries.map((s) => formatSkillEntry(s)).join(";");
2131
+ parts.push(`skills-sh:${repoName}:{${skillParts}}`);
2132
+ }
1943
2133
  if (userSkills.length > 0) {
1944
2134
  const skillParts = userSkills.map((s) => formatSkillEntry(s)).join(";");
1945
2135
  parts.push(`user:{${skillParts}}`);
@@ -2008,7 +2198,7 @@ function getDefaultSkillSources(cwd, options = {}) {
2008
2198
  sources.push({
2009
2199
  type: "plugin",
2010
2200
  path: pluginPath,
2011
- label: path20.basename(pluginPath)
2201
+ label: path22.basename(pluginPath)
2012
2202
  });
2013
2203
  }
2014
2204
  if (includeEnabledPlugins) {
@@ -2016,7 +2206,7 @@ function getDefaultSkillSources(cwd, options = {}) {
2016
2206
  sources.push(...enabledPluginSources);
2017
2207
  }
2018
2208
  if (includeUser) {
2019
- const userSkillsPath = path20.join(os2.homedir(), ".claude", "skills");
2209
+ const userSkillsPath = path22.join(os2.homedir(), ".claude", "skills");
2020
2210
  sources.push({
2021
2211
  type: "user",
2022
2212
  path: userSkillsPath,
@@ -2024,7 +2214,7 @@ function getDefaultSkillSources(cwd, options = {}) {
2024
2214
  });
2025
2215
  }
2026
2216
  if (includeProject) {
2027
- const projectSkillsPath = path20.join(cwd, ".claude", "skills");
2217
+ const projectSkillsPath = path22.join(cwd, ".claude", "skills");
2028
2218
  sources.push({
2029
2219
  type: "project",
2030
2220
  path: projectSkillsPath,
@@ -2035,12 +2225,12 @@ function getDefaultSkillSources(cwd, options = {}) {
2035
2225
  }
2036
2226
  async function embedSkills(options) {
2037
2227
  const { cwd, sources, output = "AGENTS.md" } = options;
2038
- const targetPath = path20.join(cwd, output);
2228
+ const targetPath = path22.join(cwd, output);
2039
2229
  let sizeBefore = 0;
2040
2230
  let isNewFile = true;
2041
2231
  let existingContent = "";
2042
- if (fs20.existsSync(targetPath)) {
2043
- existingContent = fs20.readFileSync(targetPath, "utf-8");
2232
+ if (fs22.existsSync(targetPath)) {
2233
+ existingContent = fs22.readFileSync(targetPath, "utf-8");
2044
2234
  sizeBefore = Buffer.byteLength(existingContent, "utf-8");
2045
2235
  isNewFile = false;
2046
2236
  }
@@ -2054,7 +2244,8 @@ async function embedSkills(options) {
2054
2244
  const sourceBreakdown = {
2055
2245
  plugin: 0,
2056
2246
  user: 0,
2057
- project: 0
2247
+ project: 0,
2248
+ "skills-sh": 0
2058
2249
  };
2059
2250
  for (const skill of skills) {
2060
2251
  sourceBreakdown[skill.source]++;
@@ -2063,7 +2254,7 @@ async function embedSkills(options) {
2063
2254
  regenerateCommand: `npx agdex skills embed`
2064
2255
  });
2065
2256
  const newContent = injectSkillsIndex(existingContent, indexContent);
2066
- fs20.writeFileSync(targetPath, newContent, "utf-8");
2257
+ fs22.writeFileSync(targetPath, newContent, "utf-8");
2067
2258
  const sizeAfter = Buffer.byteLength(newContent, "utf-8");
2068
2259
  return {
2069
2260
  success: true,
@@ -2077,24 +2268,24 @@ async function embedSkills(options) {
2077
2268
  }
2078
2269
 
2079
2270
  // src/lib/config.ts
2080
- import fs21 from "fs";
2081
- import path21 from "path";
2271
+ import fs23 from "fs";
2272
+ import path23 from "path";
2082
2273
  var DEFAULT_CONFIG = {
2083
2274
  output: "CLAUDE.md"
2084
2275
  };
2085
2276
  function loadConfig(cwd = process.cwd()) {
2086
- const rcPath = path21.join(cwd, ".agdexrc.json");
2087
- if (fs21.existsSync(rcPath)) {
2277
+ const rcPath = path23.join(cwd, ".agdexrc.json");
2278
+ if (fs23.existsSync(rcPath)) {
2088
2279
  try {
2089
- const content = fs21.readFileSync(rcPath, "utf-8");
2280
+ const content = fs23.readFileSync(rcPath, "utf-8");
2090
2281
  const config = JSON.parse(content);
2091
2282
  return { ...DEFAULT_CONFIG, ...config };
2092
2283
  } catch {}
2093
2284
  }
2094
- const packageJsonPath = path21.join(cwd, "package.json");
2095
- if (fs21.existsSync(packageJsonPath)) {
2285
+ const packageJsonPath = path23.join(cwd, "package.json");
2286
+ if (fs23.existsSync(packageJsonPath)) {
2096
2287
  try {
2097
- const content = fs21.readFileSync(packageJsonPath, "utf-8");
2288
+ const content = fs23.readFileSync(packageJsonPath, "utf-8");
2098
2289
  const packageJson = JSON.parse(content);
2099
2290
  if (packageJson.agdex && typeof packageJson.agdex === "object") {
2100
2291
  return { ...DEFAULT_CONFIG, ...packageJson.agdex };
@@ -2108,4 +2299,4 @@ function getDefaultOutput(cwd = process.cwd()) {
2108
2299
  return config.output || "AGENTS.md";
2109
2300
  }
2110
2301
 
2111
- export { __toESM, __commonJS, __require, pullDocs, collectDocFiles, buildDocTree, generateIndex, hasExistingIndex, removeDocsIndex, injectIndex, ensureGitignoreEntry, getGlobalCacheDir, getLocalCacheDir, embed, nextjsProvider, reactProvider, pixiProvider, rattlerBuildProvider, tauriProvider, condaForgeProvider, bunProvider, svelteProvider, tailwindProvider, ruffProvider, tyProvider, basedpyrightProvider, convexProvider, polarsProvider, deltaRsProvider, obsidianProvider, obsidianExcalidrawProvider, ffmpegProvider, manimProvider, createProvider, createLocalProvider, getProvider, listProviders, isProviderAvailable, getEnabledPluginSources, parseSkillFrontmatter, discoverPluginSkills, discoverFlatSkills, collectAllSkills, generateSkillsIndex, hasExistingSkillsIndex, removeSkillsIndex, injectSkillsIndex, getDefaultSkillSources, embedSkills, loadConfig, getDefaultOutput };
2302
+ export { __toESM, __commonJS, __require, pullDocs, collectDocFiles, buildDocTree, generateIndex, hasExistingIndex, getEmbeddedProviders, removeDocsIndex, injectIndex, ensureGitignoreEntry, getGlobalCacheDir, getLocalCacheDir, embed, nextjsProvider, reactProvider, pixiProvider, rattlerBuildProvider, tauriProvider, condaForgeProvider, bunProvider, svelteProvider, tailwindProvider, ruffProvider, tyProvider, basedpyrightProvider, convexProvider, polarsProvider, deltaRsProvider, obsidianProvider, obsidianExcalidrawProvider, ffmpegProvider, manimProvider, createProvider, createLocalProvider, getProvider, listProviders, isProviderAvailable, fetchSkillsShSearch, getEnabledPluginSources, parseSkillFrontmatter, discoverPluginSkills, discoverFlatSkills, discoverSkillsShRepo, collectAllSkills, generateSkillsIndex, hasExistingSkillsIndex, removeSkillsIndex, injectSkillsIndex, getDefaultSkillSources, embedSkills, loadConfig, getDefaultOutput };
package/dist/index.d.ts CHANGED
@@ -35,7 +35,7 @@
35
35
  * })
36
36
  * ```
37
37
  */
38
- export { embed, pullDocs, collectDocFiles, buildDocTree, generateIndex, injectIndex, hasExistingIndex, removeDocsIndex, ensureGitignoreEntry, getGlobalCacheDir, getLocalCacheDir, } from './lib/agents-md';
38
+ export { embed, pullDocs, collectDocFiles, buildDocTree, generateIndex, injectIndex, hasExistingIndex, removeDocsIndex, getEmbeddedProviders, ensureGitignoreEntry, getGlobalCacheDir, getLocalCacheDir, } from './lib/agents-md';
39
39
  export { nextjsProvider, reactProvider, pixiProvider, rattlerBuildProvider, tauriProvider, condaForgeProvider, bunProvider, createProvider, createLocalProvider, getProvider, listProviders, isProviderAvailable, } from './lib/providers';
40
40
  export { embedSkills, collectAllSkills, parseSkillFrontmatter, discoverPluginSkills, discoverFlatSkills, generateSkillsIndex, injectSkillsIndex, hasExistingSkillsIndex, removeSkillsIndex, getDefaultSkillSources, getEnabledPluginSources, } from './lib/skills';
41
41
  export { loadConfig, getDefaultOutput } from './lib/config';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,EACL,KAAK,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG/C,YAAY,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,OAAO,EACL,KAAK,EACL,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,oBAAoB,EACpB,oBAAoB,EACpB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,oBAAoB,EACpB,aAAa,EACb,kBAAkB,EAClB,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,WAAW,EACX,aAAa,EACb,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAGxB,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,qBAAqB,EACrB,oBAAoB,EACpB,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,iBAAiB,EACjB,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,cAAc,CAAA;AAGrB,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC3D,YAAY,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAG/C,YAAY,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,aAAa,EACb,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,UAAU,EACV,WAAW,EACX,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,GAClB,MAAM,aAAa,CAAA;AAEpB,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA"}
package/dist/index.js CHANGED
@@ -15,6 +15,7 @@ import {
15
15
  generateSkillsIndex,
16
16
  getDefaultOutput,
17
17
  getDefaultSkillSources,
18
+ getEmbeddedProviders,
18
19
  getEnabledPluginSources,
19
20
  getGlobalCacheDir,
20
21
  getLocalCacheDir,
@@ -35,7 +36,7 @@ import {
35
36
  removeDocsIndex,
36
37
  removeSkillsIndex,
37
38
  tauriProvider
38
- } from "./index-2hm5b6yq.js";
39
+ } from "./index-thmt54kg.js";
39
40
  export {
40
41
  tauriProvider,
41
42
  removeSkillsIndex,
@@ -57,6 +58,7 @@ export {
57
58
  getLocalCacheDir,
58
59
  getGlobalCacheDir,
59
60
  getEnabledPluginSources,
61
+ getEmbeddedProviders,
60
62
  getDefaultSkillSources,
61
63
  getDefaultOutput,
62
64
  generateSkillsIndex,
@@ -27,6 +27,11 @@ export declare function generateIndex(options: IndexOptions): string;
27
27
  * If no provider specified, checks for any index
28
28
  */
29
29
  export declare function hasExistingIndex(content: string, providerName?: string): boolean;
30
+ /**
31
+ * Get all embedded provider names from content
32
+ * Returns an array of provider name strings found in AGENTS-MD-EMBED-START markers
33
+ */
34
+ export declare function getEmbeddedProviders(content: string): string[];
30
35
  /**
31
36
  * Remove the docs index from content
32
37
  * If providerName specified, only removes that provider's index
@@ -1 +1 @@
1
- {"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/lib/agents-md.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,SAAS,CAAA;AAkBhB;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,UAAU,CAAC,CAwDrB;AAiDD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9D,OAAO,EAAE,CA4CX;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CA8E3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAkC3D;AAkCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAMhF;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAkD9E;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBxG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAuBlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CA6GvE;AAGD,YAAY,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/lib/agents-md.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,EACZ,MAAM,SAAS,CAAA;AAkBhB;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,QAAQ,EAAE,WAAW,EACrB,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3D,OAAO,CAAC,UAAU,CAAC,CAmDrB;AAiDD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC9D,OAAO,EAAE,CA4CX;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,EAAE,CA8E3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAkC3D;AAkCD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAMhF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAQ9D;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAkD9E;AAWD;;;GAGG;AACH,wBAAgB,WAAW,CAAC,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,CAkBxG;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAuBlF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAsB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,WAAW,CAAC,CAiIvE;AAGD,YAAY,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,UAAU,EACV,eAAe,EACf,YAAY,EACZ,YAAY,EACZ,WAAW,GACZ,MAAM,SAAS,CAAA"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * conda-forge cuda-feedstock documentation provider
3
+ */
4
+ import type { DocProvider } from '../types';
5
+ export declare const cudaFeedstockProvider: DocProvider;
6
+ //# sourceMappingURL=cuda-feedstock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cuda-feedstock.d.ts","sourceRoot":"","sources":["../../../src/lib/providers/cuda-feedstock.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,WAAW,EAAiB,MAAM,UAAU,CAAA;AAM1D,eAAO,MAAM,qBAAqB,EAAE,WAUnC,CAAA"}
@@ -14,6 +14,8 @@ export interface GenericProviderOptions {
14
14
  packageName?: string;
15
15
  /** Function to convert version to git tag */
16
16
  versionToTag?: (version: string) => string;
17
+ /** Default branch to use when version detection fails (default: 'main') */
18
+ defaultBranch?: string;
17
19
  /** Files to exclude from index (glob patterns) */
18
20
  excludePatterns?: string[];
19
21
  /** Custom instruction to include in the index */