skilld 0.7.0 → 0.8.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 (45) hide show
  1. package/README.md +7 -9
  2. package/dist/agent/index.d.mts +1 -309
  3. package/dist/agent/index.mjs +1 -6
  4. package/dist/cache/index.d.mts +1 -2
  5. package/dist/cache/index.mjs +1 -3
  6. package/dist/cli.d.mts +1 -1
  7. package/dist/cli.mjs +1 -4220
  8. package/dist/index.d.mts +1 -6
  9. package/dist/index.mjs +1 -10
  10. package/dist/retriv/index.d.mts +1 -26
  11. package/dist/retriv/index.mjs +1 -109
  12. package/dist/retriv/worker.d.mts +1 -33
  13. package/dist/retriv/worker.mjs +1 -51
  14. package/dist/sources/index.d.mts +1 -2
  15. package/dist/sources/index.mjs +1 -4
  16. package/dist/types.d.mts +1 -6
  17. package/dist/types.mjs +1 -1
  18. package/package.json +7 -7
  19. package/dist/_chunks/chunk.mjs +0 -13
  20. package/dist/_chunks/config.mjs +0 -25
  21. package/dist/_chunks/config.mjs.map +0 -1
  22. package/dist/_chunks/detect-imports.mjs +0 -1915
  23. package/dist/_chunks/detect-imports.mjs.map +0 -1
  24. package/dist/_chunks/embedding-cache.mjs +0 -50
  25. package/dist/_chunks/embedding-cache.mjs.map +0 -1
  26. package/dist/_chunks/npm.mjs +0 -1821
  27. package/dist/_chunks/npm.mjs.map +0 -1
  28. package/dist/_chunks/pool2.mjs +0 -120
  29. package/dist/_chunks/pool2.mjs.map +0 -1
  30. package/dist/_chunks/storage.mjs +0 -436
  31. package/dist/_chunks/storage.mjs.map +0 -1
  32. package/dist/_chunks/types.d.mts +0 -90
  33. package/dist/_chunks/types.d.mts.map +0 -1
  34. package/dist/_chunks/utils.d.mts +0 -529
  35. package/dist/_chunks/utils.d.mts.map +0 -1
  36. package/dist/_chunks/version.d.mts +0 -153
  37. package/dist/_chunks/version.d.mts.map +0 -1
  38. package/dist/_chunks/yaml.mjs +0 -415
  39. package/dist/_chunks/yaml.mjs.map +0 -1
  40. package/dist/agent/index.d.mts.map +0 -1
  41. package/dist/cli.mjs.map +0 -1
  42. package/dist/retriv/index.d.mts.map +0 -1
  43. package/dist/retriv/index.mjs.map +0 -1
  44. package/dist/retriv/worker.d.mts.map +0 -1
  45. package/dist/retriv/worker.mjs.map +0 -1
package/README.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## Why?
10
10
 
11
- Agents have [knowledge cutoffs](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) and predict the most likely code from training data, not the best code. For example, [Vue v3.5](https://blog.vuejs.org/posts/vue-3-5) was released over 16 months ago and agents refuse so use its features out-of-the-box. This is because they're trained on conventions not the latest docs.
11
+ Agents have [knowledge cutoffs](https://platform.claude.com/docs/en/about-claude/models/overview#latest-models-comparison) and predict the most likely code from training data, not the best code. For example, [Vue v3.5](https://blog.vuejs.org/posts/vue-3-5) was released over 16 months ago and agents refuse to use its features out-of-the-box. This is because they're trained on conventions not the latest docs.
12
12
 
13
13
  Methods of getting the right context to your agent require either manual curation, author opt-in, or external servers. See [the landscape](#the-landscape)
14
14
  for more details.
@@ -59,7 +59,7 @@ If you need to re-configure skilld, just run `npx -y skilld config` to update yo
59
59
 
60
60
  ## FAQ
61
61
 
62
- ### Why doesn't the skills run?
62
+ ### Why don't the skills run?
63
63
 
64
64
  Try this in your project/user prompt:
65
65
 
@@ -72,16 +72,16 @@ For each skill, determine YES/NO relevance and invoke all YES skills before proc
72
72
 
73
73
  Context7 is an MCP that fetches raw doc chunks at query time. You get different results each prompt, no curation, and it requires their server. Skilld is local-first: it generates a SKILL.md that lives in your project, tied to your actual package versions. No MCP dependency, no per-prompt latency, and it goes further with LLM-enhanced sections, prompt injection sanitization, and semantic search.
74
74
 
75
- ### Will I be prompt injection?
75
+ ### Will I be prompt injected?
76
76
 
77
77
  Skilld pulls issues from GitHub which could be abused for potential prompt injection.
78
78
 
79
- Skilld treats all data as unstrusted, running in permissioned environments and using best practices to avoid injections.
80
- However, always be cautious when using skills from untrusted source.
79
+ Skilld treats all data as untrusted, running in permissioned environments and using best practices to avoid injections.
80
+ However, always be cautious when using skills from untrusted sources.
81
81
 
82
82
  ### Do skills update when my deps update?
83
83
 
84
- Yes. Run `skilld update` to regenerate outdated skills, or add `skilld --prepare -b` to your prepare script and they regenerate in the background whenever you install packages.
84
+ Yes. Run `skilld update` to regenerate outdated skills, or add `skilld update -b` to your prepare script and they regenerate in the background whenever you install packages.
85
85
 
86
86
  ## Installation
87
87
 
@@ -102,7 +102,7 @@ Add to `package.json` to keep skills fresh on install:
102
102
  ```json
103
103
  {
104
104
  "scripts": {
105
- "prepare": "skilld --prepare -b"
105
+ "prepare": "skilld update -b"
106
106
  }
107
107
  }
108
108
  ```
@@ -169,8 +169,6 @@ skilld config
169
169
  | `--force` | `-f` | `false` | Ignore all caches, re-fetch docs and regenerate |
170
170
  | `--model` | `-m` | config default | LLM model for skill generation (sonnet, haiku, opus, etc.) |
171
171
  | `--debug` | | `false` | Save raw LLM output to logs/ for each section |
172
- | `--prepare` | | `false` | Non-interactive sync for prepare hook (outdated only) |
173
- | `--background` | `-b` | `false` | Run `--prepare` in a detached background process |
174
172
 
175
173
  ## The Landscape
176
174
 
@@ -1,309 +1 @@
1
- //#region src/core/config.d.ts
2
- interface FeaturesConfig {
3
- search: boolean;
4
- issues: boolean;
5
- discussions: boolean;
6
- releases: boolean;
7
- }
8
- //#endregion
9
- //#region src/agent/prompts/optional/types.d.ts
10
- interface CustomPrompt {
11
- heading: string;
12
- body: string;
13
- }
14
- //#endregion
15
- //#region src/agent/prompts/prompt.d.ts
16
- type SkillSection = 'api-changes' | 'best-practices' | 'api' | 'custom';
17
- /** Output file per section (inside .skilld/) */
18
- declare const SECTION_OUTPUT_FILES: Record<SkillSection, string>;
19
- /** Merge order for final SKILL.md body */
20
- declare const SECTION_MERGE_ORDER: SkillSection[];
21
- interface BuildSkillPromptOptions {
22
- packageName: string;
23
- /** Absolute path to skill directory with ./.skilld/ */
24
- skillDir: string;
25
- /** Package version (e.g., "3.5.13") */
26
- version?: string;
27
- /** Has GitHub issues indexed */
28
- hasIssues?: boolean;
29
- /** Has GitHub discussions indexed */
30
- hasDiscussions?: boolean;
31
- /** Has release notes */
32
- hasReleases?: boolean;
33
- /** CHANGELOG filename if found in package (e.g. CHANGELOG.md, changelog.md) */
34
- hasChangelog?: string | false;
35
- /** Resolved absolute paths to .md doc files */
36
- docFiles?: string[];
37
- /** Doc source type */
38
- docsType?: 'llms.txt' | 'readme' | 'docs';
39
- /** Package ships its own docs */
40
- hasShippedDocs?: boolean;
41
- /** Custom instructions from the user (when 'custom' section selected) */
42
- customPrompt?: CustomPrompt;
43
- /** Resolved feature flags */
44
- features?: FeaturesConfig;
45
- }
46
- /**
47
- * Build prompt for a single section
48
- */
49
- declare function buildSectionPrompt(opts: BuildSkillPromptOptions & {
50
- section: SkillSection;
51
- }): string;
52
- /**
53
- * Build prompts for all selected sections, sharing the computed preamble
54
- */
55
- declare function buildAllSectionPrompts(opts: BuildSkillPromptOptions & {
56
- sections: SkillSection[];
57
- }): Map<SkillSection, string>;
58
- //#endregion
59
- //#region src/agent/prompts/skill.d.ts
60
- interface SkillOptions {
61
- name: string;
62
- version?: string;
63
- releasedAt?: string;
64
- /** Production dependencies with version specifiers */
65
- dependencies?: Record<string, string>;
66
- /** npm dist-tags with version and release date */
67
- distTags?: Record<string, {
68
- version: string;
69
- releasedAt?: string;
70
- }>;
71
- globs?: string[];
72
- description?: string;
73
- /** LLM-generated body — replaces default heading + description */
74
- body?: string;
75
- relatedSkills: string[];
76
- hasIssues?: boolean;
77
- hasDiscussions?: boolean;
78
- hasReleases?: boolean;
79
- hasChangelog?: string | false;
80
- docsType?: 'llms.txt' | 'readme' | 'docs';
81
- hasShippedDocs?: boolean;
82
- /** Key files in package (entry points + docs) */
83
- pkgFiles?: string[];
84
- /** Model used to generate LLM sections */
85
- generatedBy?: string;
86
- /** Override directory name for frontmatter (repo-based, e.g. "vuejs-core") */
87
- dirName?: string;
88
- /** All packages tracked by this skill (multi-package skills) */
89
- packages?: Array<{
90
- name: string;
91
- }>;
92
- /** GitHub repo URL (owner/repo format or full URL) */
93
- repoUrl?: string;
94
- /** Resolved feature flags */
95
- features?: FeaturesConfig;
96
- }
97
- declare function generateSkillMd(opts: SkillOptions): string;
98
- //#endregion
99
- //#region src/agent/types.d.ts
100
- /**
101
- * Agent types and interfaces
102
- */
103
- type AgentType = 'claude-code' | 'cursor' | 'windsurf' | 'cline' | 'codex' | 'github-copilot' | 'gemini-cli' | 'goose' | 'amp' | 'opencode' | 'roo';
104
- interface SkillMetadata {
105
- name: string;
106
- version?: string;
107
- /** ISO date string when this version was released */
108
- releasedAt?: string;
109
- description?: string;
110
- }
111
- //#endregion
112
- //#region src/agent/clis/types.d.ts
113
- type OptimizeModel = 'opus' | 'sonnet' | 'haiku' | 'gemini-3-pro' | 'gemini-3-flash' | 'gpt-5.2-codex' | 'gpt-5.1-codex-max' | 'gpt-5.2' | 'gpt-5.1-codex-mini';
114
- interface ModelInfo {
115
- id: OptimizeModel;
116
- name: string;
117
- hint: string;
118
- recommended?: boolean;
119
- agentId: string;
120
- agentName: string;
121
- }
122
- interface StreamProgress {
123
- chunk: string;
124
- type: 'reasoning' | 'text';
125
- text: string;
126
- reasoning: string;
127
- section?: SkillSection;
128
- }
129
- interface OptimizeDocsOptions {
130
- packageName: string;
131
- skillDir: string;
132
- model?: OptimizeModel;
133
- version?: string;
134
- hasGithub?: boolean;
135
- hasReleases?: boolean;
136
- hasChangelog?: string | false;
137
- docFiles?: string[];
138
- docsType?: 'llms.txt' | 'readme' | 'docs';
139
- hasShippedDocs?: boolean;
140
- onProgress?: (progress: StreamProgress) => void;
141
- timeout?: number;
142
- verbose?: boolean;
143
- debug?: boolean;
144
- noCache?: boolean;
145
- /** Which sections to generate */
146
- sections?: SkillSection[];
147
- /** Custom instructions from the user */
148
- customPrompt?: CustomPrompt;
149
- /** Resolved feature flags */
150
- features?: FeaturesConfig;
151
- }
152
- interface OptimizeResult {
153
- optimized: string;
154
- wasOptimized: boolean;
155
- error?: string;
156
- warnings?: string[];
157
- reasoning?: string;
158
- finishReason?: string;
159
- usage?: {
160
- inputTokens: number;
161
- outputTokens: number;
162
- totalTokens: number;
163
- };
164
- cost?: number;
165
- debugLogsDir?: string;
166
- }
167
- //#endregion
168
- //#region src/agent/clis/index.d.ts
169
- declare function getModelName(id: OptimizeModel): string;
170
- declare function getModelLabel(id: OptimizeModel): string;
171
- declare function getAvailableModels(): Promise<ModelInfo[]>;
172
- declare function optimizeDocs(opts: OptimizeDocsOptions): Promise<OptimizeResult>;
173
- //#endregion
174
- //#region src/agent/detect.d.ts
175
- /**
176
- * Detect which agents are installed on the system
177
- */
178
- declare function detectInstalledAgents(): AgentType[];
179
- /**
180
- * Detect the target agent (where skills are installed) from env vars and cwd.
181
- * This is NOT the generator LLM — it determines the skills directory.
182
- *
183
- * Priority: env vars first (running inside agent), then project dirs.
184
- * Iteration order of the agents record determines priority.
185
- */
186
- declare function detectTargetAgent(): AgentType | null;
187
- /**
188
- * Get the version of an agent's CLI (if available)
189
- */
190
- declare function getAgentVersion(agentType: AgentType): string | null;
191
- //#endregion
192
- //#region src/agent/detect-imports.d.ts
193
- /**
194
- * Detect directly-used npm packages by scanning source files
195
- * Uses mlly for proper ES module parsing + globby for gitignore support
196
- */
197
- interface PackageUsage {
198
- name: string;
199
- count: number;
200
- source?: 'import' | 'preset';
201
- }
202
- interface DetectResult {
203
- packages: PackageUsage[];
204
- error?: string;
205
- }
206
- /**
207
- * Scan source files to detect all directly-imported npm packages
208
- * Async with gitignore support for proper spinner animation
209
- */
210
- declare function detectImportedPackages(cwd?: string): Promise<DetectResult>;
211
- //#endregion
212
- //#region src/agent/install.d.ts
213
- /**
214
- * Sanitize skill name for filesystem
215
- */
216
- declare function sanitizeName(name: string): string;
217
- /**
218
- * Compute skill directory name from GitHub owner/repo when available,
219
- * falling back to sanitized package name.
220
- *
221
- * Examples:
222
- * vue (vuejs/core) → vuejs-core
223
- * @nuxt/ui (nuxt/ui) → nuxt-ui
224
- * vue-router (vuejs/router) → vuejs-router
225
- */
226
- declare function computeSkillDirName(packageName: string, repoUrl?: string): string;
227
- /**
228
- * Install a skill directly to agent skill directories
229
- * Writes to each agent's skill folder in the project (e.g., .claude/skills/package-name/)
230
- */
231
- declare function installSkillForAgents(skillName: string, skillContent: string, options?: {
232
- global?: boolean;
233
- cwd?: string;
234
- agents?: AgentType[]; /** Additional files to write (filename -> content) */
235
- files?: Record<string, string>;
236
- }): {
237
- installed: AgentType[];
238
- paths: string[];
239
- };
240
- /**
241
- * Create relative symlinks from each detected agent's skills dir to the shared .skills/ dir.
242
- * Only targets agents whose config dir already exists in the project.
243
- * Replaces existing symlinks, skips real directories (user's custom skills).
244
- */
245
- declare function linkSkillToAgents(skillName: string, sharedDir: string, cwd: string): void;
246
- /**
247
- * Remove per-agent symlinks for a skill when removing from shared dir.
248
- */
249
- declare function unlinkSkillFromAgents(skillName: string, cwd: string): void;
250
- //#endregion
251
- //#region src/agent/targets/types.d.ts
252
- interface FrontmatterField {
253
- /** Field name in YAML frontmatter */
254
- name: string;
255
- /** Whether the field is required by the agent */
256
- required: boolean;
257
- /** Description of what the field does */
258
- description: string;
259
- /** Constraints (max length, regex, etc.) */
260
- constraints?: string;
261
- }
262
- interface AgentTarget {
263
- /** Agent identifier */
264
- agent: AgentType;
265
- /** Human-readable agent name */
266
- displayName: string;
267
- /** Check if agent is installed on the system */
268
- detectInstalled: () => boolean;
269
- /** Check env vars to detect if running inside this agent */
270
- detectEnv: () => boolean;
271
- /** Check project-level config dirs/files to detect this agent */
272
- detectProject: (cwd: string) => boolean;
273
- /** CLI command name (if agent has a CLI for skill generation) */
274
- cli?: string;
275
- /** Project-level instruction file for always-on rules (e.g. CLAUDE.md, AGENTS.md) */
276
- instructionFile?: string;
277
- /** Required skill filename (always SKILL.md for Agent Skills spec agents) */
278
- skillFilename: string;
279
- /** Project-level skill directory */
280
- skillsDir: string;
281
- /** Global (user-level) skill directory (resolved absolute path) */
282
- globalSkillsDir: string;
283
- /** Additional directories this agent scans for skills (cross-compat) */
284
- additionalSkillsDirs: string[];
285
- /** Supported frontmatter fields */
286
- frontmatter: FrontmatterField[];
287
- /** Whether `name` must exactly match the parent directory name */
288
- nameMatchesDir: boolean;
289
- /** Name field regex constraint */
290
- namePattern: string;
291
- /** How skills are discovered: 'eager' (startup scan) or 'lazy' (on-demand) */
292
- discoveryStrategy: 'eager' | 'lazy';
293
- /** Brief description of how discovery works */
294
- discoveryNotes: string;
295
- /** Whether this agent follows the agentskills.io spec */
296
- agentSkillsSpec: boolean;
297
- /** Agent-specific extensions beyond the spec */
298
- extensions: string[];
299
- /** Link to official documentation */
300
- docs: string;
301
- /** Additional notes, quirks, known issues */
302
- notes: string[];
303
- }
304
- //#endregion
305
- //#region src/agent/targets/registry.d.ts
306
- declare const targets: Record<AgentType, AgentTarget>;
307
- //#endregion
308
- export { type AgentTarget, type AgentType, type CustomPrompt, type FrontmatterField, type ModelInfo, type OptimizeDocsOptions, type OptimizeModel, type OptimizeResult, SECTION_MERGE_ORDER, SECTION_OUTPUT_FILES, type SkillMetadata, type SkillOptions, type SkillSection, type StreamProgress, targets as agents, buildAllSectionPrompts, buildSectionPrompt, computeSkillDirName, detectImportedPackages, detectInstalledAgents, detectTargetAgent, generateSkillMd, getAgentVersion, getAvailableModels, getModelLabel, getModelName, installSkillForAgents, linkSkillToAgents, optimizeDocs, sanitizeName, unlinkSkillFromAgents };
309
- //# sourceMappingURL=index.d.mts.map
1
+ export * from "../../src/agent/index.ts";
@@ -1,6 +1 @@
1
- import "../_chunks/chunk.mjs";
2
- import "../_chunks/config.mjs";
3
- import "../_chunks/storage.mjs";
4
- import "../_chunks/yaml.mjs";
5
- import { _ as detectTargetAgent, a as optimizeDocs, c as installSkillForAgents, d as unlinkSkillFromAgents, f as SECTION_MERGE_ORDER, g as detectInstalledAgents, h as buildSectionPrompt, i as getModelName, l as linkSkillToAgents, m as buildAllSectionPrompts, n as getAvailableModels, o as generateSkillMd, p as SECTION_OUTPUT_FILES, r as getModelLabel, s as computeSkillDirName, t as detectImportedPackages, u as sanitizeName, v as getAgentVersion, y as targets } from "../_chunks/detect-imports.mjs";
6
- export { SECTION_MERGE_ORDER, SECTION_OUTPUT_FILES, targets as agents, buildAllSectionPrompts, buildSectionPrompt, computeSkillDirName, detectImportedPackages, detectInstalledAgents, detectTargetAgent, generateSkillMd, getAgentVersion, getAvailableModels, getModelLabel, getModelName, installSkillForAgents, linkSkillToAgents, optimizeDocs, sanitizeName, unlinkSkillFromAgents };
1
+ export * from "../../src/agent/index.ts";
@@ -1,2 +1 @@
1
- import { C as CacheConfig, D as REFERENCES_DIR, E as CACHE_DIR, O as getPackageDbPath, S as writeToCache, T as CachedPackage, _ as listReferenceFiles, a as clearAllCache, b as resolvePkgDir, c as getPkgKeyFiles, d as isCached, f as linkCachedDir, g as listCached, h as linkShippedSkill, i as ShippedSkill, l as getShippedSkills, m as linkPkgNamed, n as getCacheKey, o as clearCache, p as linkPkg, r as getVersionKey, s as ensureCacheDir, t as getCacheDir, u as hasShippedDocs, v as readCachedDocs, w as CachedDoc, x as writeSections, y as readCachedSection } from "../_chunks/version.mjs";
2
- export { CACHE_DIR, type CacheConfig, type CachedDoc, type CachedPackage, REFERENCES_DIR, type ShippedSkill, clearAllCache, clearCache, ensureCacheDir, getCacheDir, getCacheKey, getPackageDbPath, getPkgKeyFiles, getShippedSkills, getVersionKey, hasShippedDocs, isCached, linkCachedDir, linkPkg, linkPkgNamed, linkShippedSkill, listCached, listReferenceFiles, readCachedDocs, readCachedSection, resolvePkgDir, writeSections, writeToCache };
1
+ export * from "../../src/cache/index.ts";
@@ -1,3 +1 @@
1
- import { a as getCacheKey, i as getCacheDir, n as REFERENCES_DIR, o as getVersionKey, r as getPackageDbPath, t as CACHE_DIR } from "../_chunks/config.mjs";
2
- import { _ as writeSections, a as getShippedSkills, c as linkCachedDir, d as linkShippedSkill, f as listCached, g as resolvePkgDir, h as readCachedSection, i as getPkgKeyFiles, l as linkPkg, m as readCachedDocs, n as clearCache, o as hasShippedDocs, p as listReferenceFiles, r as ensureCacheDir, s as isCached, t as clearAllCache, u as linkPkgNamed, v as writeToCache } from "../_chunks/storage.mjs";
3
- export { CACHE_DIR, REFERENCES_DIR, clearAllCache, clearCache, ensureCacheDir, getCacheDir, getCacheKey, getPackageDbPath, getPkgKeyFiles, getShippedSkills, getVersionKey, hasShippedDocs, isCached, linkCachedDir, linkPkg, linkPkgNamed, linkShippedSkill, listCached, listReferenceFiles, readCachedDocs, readCachedSection, resolvePkgDir, writeSections, writeToCache };
1
+ export * from "../../src/cache/index.ts";
package/dist/cli.d.mts CHANGED
@@ -1 +1 @@
1
- export { };
1
+ export * from "../src/cli.ts";