@framers/agentos-skills-registry 0.2.0 → 0.3.0

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 (64) hide show
  1. package/CONTRIBUTING.md +231 -0
  2. package/README.md +146 -49
  3. package/dist/catalog.d.ts +105 -6
  4. package/dist/catalog.d.ts.map +1 -1
  5. package/dist/catalog.js +257 -206
  6. package/dist/catalog.js.map +1 -1
  7. package/dist/index.d.ts +30 -8
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +48 -25
  10. package/dist/index.js.map +1 -1
  11. package/dist/schema-types.d.ts +79 -0
  12. package/dist/schema-types.d.ts.map +1 -0
  13. package/dist/schema-types.js +11 -0
  14. package/dist/schema-types.js.map +1 -0
  15. package/dist/workspace-discovery.d.ts +77 -0
  16. package/dist/workspace-discovery.d.ts.map +1 -0
  17. package/dist/workspace-discovery.js +172 -0
  18. package/dist/workspace-discovery.js.map +1 -0
  19. package/package.json +17 -5
  20. package/registry/community/.gitkeep +0 -0
  21. package/registry/curated/1password/SKILL.md +53 -0
  22. package/registry/curated/account-manager/SKILL.md +60 -0
  23. package/registry/curated/apple-notes/SKILL.md +45 -0
  24. package/registry/curated/apple-reminders/SKILL.md +46 -0
  25. package/registry/curated/blog-publisher/SKILL.md +110 -0
  26. package/registry/curated/bluesky-bot/SKILL.md +93 -0
  27. package/registry/curated/cloud-ops/SKILL.md +124 -0
  28. package/registry/curated/coding-agent/SKILL.md +40 -0
  29. package/registry/curated/content-creator/SKILL.md +53 -0
  30. package/registry/curated/deep-research/SKILL.md +56 -0
  31. package/registry/curated/discord-helper/SKILL.md +43 -0
  32. package/registry/curated/facebook-bot/SKILL.md +94 -0
  33. package/registry/curated/git/SKILL.md +39 -0
  34. package/registry/curated/github/SKILL.md +54 -0
  35. package/registry/curated/healthcheck/SKILL.md +43 -0
  36. package/registry/curated/image-gen/SKILL.md +50 -0
  37. package/registry/curated/instagram-bot/SKILL.md +60 -0
  38. package/registry/curated/linkedin-bot/SKILL.md +86 -0
  39. package/registry/curated/mastodon-bot/SKILL.md +104 -0
  40. package/registry/curated/memory-manager/SKILL.md +127 -0
  41. package/registry/curated/notion/SKILL.md +43 -0
  42. package/registry/curated/obsidian/SKILL.md +42 -0
  43. package/registry/curated/pinterest-bot/SKILL.md +45 -0
  44. package/registry/curated/reddit-bot/SKILL.md +74 -0
  45. package/registry/curated/seo-campaign/SKILL.md +51 -0
  46. package/registry/curated/site-deploy/SKILL.md +119 -0
  47. package/registry/curated/slack-helper/SKILL.md +43 -0
  48. package/registry/curated/social-broadcast/SKILL.md +145 -0
  49. package/registry/curated/spotify-player/SKILL.md +45 -0
  50. package/registry/curated/summarize/SKILL.md +40 -0
  51. package/registry/curated/threads-bot/SKILL.md +82 -0
  52. package/registry/curated/tiktok-bot/SKILL.md +104 -0
  53. package/registry/curated/trello/SKILL.md +44 -0
  54. package/registry/curated/twitter-bot/SKILL.md +63 -0
  55. package/registry/curated/voice-conversation/SKILL.md +65 -0
  56. package/registry/curated/weather/SKILL.md +37 -0
  57. package/registry/curated/web-scraper/SKILL.md +60 -0
  58. package/registry/curated/web-search/SKILL.md +49 -0
  59. package/registry/curated/whisper-transcribe/SKILL.md +58 -0
  60. package/registry/curated/youtube-bot/SKILL.md +104 -0
  61. package/registry.json +1478 -0
  62. package/scripts/update-registry.mjs +126 -0
  63. package/scripts/validate-skill.mjs +304 -0
  64. package/types.d.ts +77 -0
package/dist/catalog.js CHANGED
@@ -2,215 +2,215 @@
2
2
  * @fileoverview Curated Skills Catalog for AgentOS
3
3
  * @module @framers/agentos-skills-registry/catalog
4
4
  *
5
- * Statically-typed catalog of all curated skills with metadata for
6
- * programmatic discovery, filtering by category/tag, and tool-based
7
- * availability checks.
5
+ * Programmatic catalog derived from registry.json so it stays in sync with
6
+ * bundled SKILL.md entries.
7
+ *
8
+ * Pattern mirrors `@framers/agentos-extensions-registry/tool-registry`:
9
+ * - `SKILLS_CATALOG` array with metadata + lazy `loadSkill` factory
10
+ * - `createLocalSkillProxy()` for lazy-loading from local paths
11
+ * - `loadSkillByName()` for on-demand loading by name
12
+ */
13
+ import * as path from 'node:path';
14
+ import * as fs from 'node:fs/promises';
15
+ import { createRequire } from 'node:module';
16
+ import YAML from 'yaml';
17
+ // ============================================================================
18
+ // PATH HELPERS
19
+ // ============================================================================
20
+ const __dirname = path.dirname(new URL(import.meta.url).pathname);
21
+ /** Package root (one level up from dist/ or src/) */
22
+ function resolvePackageRoot() {
23
+ return path.resolve(__dirname, '..');
24
+ }
25
+ // ============================================================================
26
+ // LAZY SKILL LOADER (mirrors createLocalPackProxy from extensions-registry)
27
+ // ============================================================================
28
+ /** Resolved module cache for @framers/agentos SkillLoader — loaded at most once. */
29
+ let _skillLoaderMod = null;
30
+ /**
31
+ * Attempt to lazily import the SkillLoader from @framers/agentos.
32
+ * Falls back to a local YAML-backed parser if the peer dep is unavailable.
33
+ */
34
+ async function getSkillParser() {
35
+ if (_skillLoaderMod)
36
+ return _skillLoaderMod;
37
+ try {
38
+ const mod = await import('@framers/agentos/skills');
39
+ _skillLoaderMod = {
40
+ parseSkillFrontmatter: mod.parseSkillFrontmatter,
41
+ extractMetadata: mod.extractMetadata,
42
+ };
43
+ return _skillLoaderMod;
44
+ }
45
+ catch {
46
+ // Fallback: local YAML-backed frontmatter parser.
47
+ _skillLoaderMod = {
48
+ parseSkillFrontmatter: builtinParseSkillFrontmatter,
49
+ extractMetadata: extractLoadedSkillMetadata,
50
+ };
51
+ return _skillLoaderMod;
52
+ }
53
+ }
54
+ /**
55
+ * Built-in frontmatter parser used when @framers/agentos is not installed.
56
+ * Uses the same YAML parser family as the standalone skills runtime so nested
57
+ * metadata blocks keep working even without the peer dependency.
58
+ */
59
+ function builtinParseSkillFrontmatter(content) {
60
+ const normalized = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
61
+ const lines = normalized.split('\n');
62
+ if (lines[0]?.trim() !== '---') {
63
+ return { frontmatter: {}, body: normalized.trim() };
64
+ }
65
+ let endIndex = -1;
66
+ for (let i = 1; i < lines.length; i++) {
67
+ if (lines[i]?.trim() === '---') {
68
+ endIndex = i;
69
+ break;
70
+ }
71
+ }
72
+ if (endIndex === -1) {
73
+ return { frontmatter: {}, body: normalized.trim() };
74
+ }
75
+ const frontmatterBlock = lines.slice(1, endIndex).join('\n');
76
+ const body = lines.slice(endIndex + 1).join('\n').trim();
77
+ try {
78
+ const parsed = YAML.parse(frontmatterBlock);
79
+ if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {
80
+ return { frontmatter: {}, body };
81
+ }
82
+ return { frontmatter: parsed, body };
83
+ }
84
+ catch {
85
+ return { frontmatter: {}, body };
86
+ }
87
+ }
88
+ export function extractLoadedSkillMetadata(frontmatter) {
89
+ const metadataValue = frontmatter.metadata;
90
+ let meta;
91
+ if (metadataValue && typeof metadataValue === 'object') {
92
+ const metadataObject = metadataValue;
93
+ meta =
94
+ metadataObject.agentos ??
95
+ metadataObject.wunderland ??
96
+ metadataObject.openclaw ??
97
+ metadataObject;
98
+ }
99
+ else if (typeof metadataValue === 'string' && metadataValue.trim()) {
100
+ try {
101
+ meta = JSON.parse(metadataValue);
102
+ }
103
+ catch {
104
+ meta = undefined;
105
+ }
106
+ }
107
+ if (!meta) {
108
+ meta = frontmatter;
109
+ }
110
+ if (!meta || typeof meta !== 'object' || Array.isArray(meta)) {
111
+ return undefined;
112
+ }
113
+ const metadata = meta;
114
+ return {
115
+ always: metadata.always === true,
116
+ skillKey: typeof metadata.skillKey === 'string' ? metadata.skillKey : undefined,
117
+ primaryEnv: typeof metadata.primaryEnv === 'string' ? metadata.primaryEnv : undefined,
118
+ emoji: typeof metadata.emoji === 'string' ? metadata.emoji : undefined,
119
+ homepage: typeof metadata.homepage === 'string' ? metadata.homepage : undefined,
120
+ os: Array.isArray(metadata.os) ? metadata.os.filter((value) => typeof value === 'string') : undefined,
121
+ requires: metadata.requires && typeof metadata.requires === 'object' && !Array.isArray(metadata.requires)
122
+ ? metadata.requires
123
+ : undefined,
124
+ install: Array.isArray(metadata.install)
125
+ ? metadata.install
126
+ : undefined,
127
+ };
128
+ }
129
+ async function loadSkillFromContent(args) {
130
+ const parser = await getSkillParser();
131
+ const { frontmatter, body } = parser.parseSkillFrontmatter(args.content);
132
+ const metadata = parser.extractMetadata?.(frontmatter) ?? extractLoadedSkillMetadata(frontmatter);
133
+ const name = typeof frontmatter.name === 'string' && frontmatter.name.trim()
134
+ ? frontmatter.name.trim()
135
+ : path.basename(path.dirname(args.absolutePath));
136
+ const description = typeof frontmatter.description === 'string' && frontmatter.description.trim()
137
+ ? frontmatter.description.trim()
138
+ : body.split('\n').find((line) => line.trim() && !line.startsWith('#'))?.trim() ?? '';
139
+ return {
140
+ name,
141
+ displayName: args.displayName,
142
+ description,
143
+ content: body,
144
+ frontmatter,
145
+ metadata,
146
+ sourcePath: args.absolutePath,
147
+ };
148
+ }
149
+ export async function loadSkillFromAbsolutePath(absolutePath, displayName) {
150
+ let content;
151
+ try {
152
+ content = await fs.readFile(absolutePath, 'utf-8');
153
+ }
154
+ catch (err) {
155
+ throw new Error(`Failed to load SKILL.md at ${absolutePath}: ${err instanceof Error ? err.message : String(err)}`);
156
+ }
157
+ return loadSkillFromContent({
158
+ absolutePath,
159
+ content,
160
+ displayName,
161
+ });
162
+ }
163
+ /**
164
+ * Create a lazy-loading skill proxy for a relative SKILL.md path.
165
+ *
166
+ * Mirrors `createLocalPackProxy()` from the extensions-registry: the SKILL.md
167
+ * is only read and parsed when the returned function is called.
168
+ *
169
+ * @param relativePath - Path from the package root to the SKILL.md file
170
+ * (e.g. 'registry/curated/github/SKILL.md')
171
+ * @param displayName - Human-readable display name for the loaded skill
8
172
  */
173
+ export function createLocalSkillProxy(relativePath, displayName) {
174
+ return async () => loadSkillFromAbsolutePath(path.resolve(resolvePackageRoot(), relativePath), displayName);
175
+ }
9
176
  // ============================================================================
10
- // CATALOG
177
+ // CATALOG BUILD
11
178
  // ============================================================================
12
- export const SKILLS_CATALOG = [
13
- // ── Information ───────────────────────────────────────────────────────
14
- {
15
- name: 'weather',
16
- displayName: 'Weather Lookup',
17
- description: 'Look up current weather conditions, forecasts, and severe weather alerts for any location worldwide.',
18
- category: 'information',
19
- tags: ['weather', 'forecast', 'climate', 'location'],
20
- requiredSecrets: [],
21
- requiredTools: ['web-search'],
22
- skillPath: 'registry/curated/weather/SKILL.md',
23
- namespace: 'wunderland',
24
- source: 'curated',
25
- },
26
- {
27
- name: 'summarize',
28
- displayName: 'Text / URL Summarization',
29
- description: 'Summarize text content, web pages, documents, and long-form articles into concise, structured summaries.',
30
- category: 'information',
31
- tags: ['summarization', 'text-processing', 'tldr', 'reading', 'content-analysis'],
32
- requiredSecrets: [],
33
- requiredTools: ['web-search'],
34
- skillPath: 'registry/curated/summarize/SKILL.md',
35
- namespace: 'wunderland',
36
- source: 'curated',
37
- },
38
- // ── Developer Tools ───────────────────────────────────────────────────
39
- {
40
- name: 'github',
41
- displayName: 'GitHub (gh CLI)',
42
- description: 'Manage GitHub repositories, issues, pull requests, releases, and Actions workflows using the gh CLI.',
43
- category: 'developer-tools',
44
- tags: ['github', 'git', 'issues', 'pull-requests', 'ci-cd', 'code-review'],
45
- requiredSecrets: ['github.token'],
46
- requiredTools: [],
47
- skillPath: 'registry/curated/github/SKILL.md',
48
- namespace: 'wunderland',
49
- source: 'curated',
50
- },
51
- {
52
- name: 'coding-agent',
53
- displayName: 'Coding Agent',
54
- description: 'Write, review, debug, refactor, and explain code across multiple programming languages and frameworks.',
55
- category: 'developer-tools',
56
- tags: ['coding', 'programming', 'code-review', 'debugging', 'refactoring', 'development'],
57
- requiredSecrets: [],
58
- requiredTools: ['filesystem'],
59
- skillPath: 'registry/curated/coding-agent/SKILL.md',
60
- namespace: 'wunderland',
61
- source: 'curated',
62
- },
63
- // ── Communication ─────────────────────────────────────────────────────
64
- {
65
- name: 'slack-helper',
66
- displayName: 'Slack Helper',
67
- description: 'Manage Slack workspaces, channels, messages, and integrations through the Slack API.',
68
- category: 'communication',
69
- tags: ['slack', 'messaging', 'workspace', 'notifications', 'team-chat'],
70
- requiredSecrets: ['slack.bot_token', 'slack.app_token'],
71
- requiredTools: [],
72
- skillPath: 'registry/curated/slack-helper/SKILL.md',
73
- namespace: 'wunderland',
74
- source: 'curated',
75
- },
76
- {
77
- name: 'discord-helper',
78
- displayName: 'Discord Helper',
79
- description: 'Manage Discord servers, channels, roles, and messages through the Discord API.',
80
- category: 'communication',
81
- tags: ['discord', 'messaging', 'server', 'moderation', 'community'],
82
- requiredSecrets: ['discord.bot_token'],
83
- requiredTools: [],
84
- skillPath: 'registry/curated/discord-helper/SKILL.md',
85
- namespace: 'wunderland',
86
- source: 'curated',
87
- },
88
- // ── Productivity ──────────────────────────────────────────────────────
89
- {
90
- name: 'notion',
91
- displayName: 'Notion',
92
- description: 'Read, create, and manage pages, databases, and content blocks in Notion workspaces.',
93
- category: 'productivity',
94
- tags: ['notion', 'wiki', 'database', 'notes', 'project-management', 'knowledge-base'],
95
- requiredSecrets: ['notion.api_key'],
96
- requiredTools: [],
97
- skillPath: 'registry/curated/notion/SKILL.md',
98
- namespace: 'wunderland',
99
- source: 'curated',
100
- },
101
- {
102
- name: 'obsidian',
103
- displayName: 'Obsidian Vault',
104
- description: 'Read, create, and manage notes, links, and metadata in Obsidian vaults via the local filesystem.',
105
- category: 'productivity',
106
- tags: ['obsidian', 'markdown', 'notes', 'knowledge-graph', 'zettelkasten', 'pkm'],
107
- requiredSecrets: [],
108
- requiredTools: ['filesystem'],
109
- skillPath: 'registry/curated/obsidian/SKILL.md',
110
- namespace: 'wunderland',
111
- source: 'curated',
112
- },
113
- {
114
- name: 'trello',
115
- displayName: 'Trello',
116
- description: 'Manage Trello boards, lists, cards, checklists, and team workflows via the Trello API.',
117
- category: 'productivity',
118
- tags: ['trello', 'kanban', 'project-management', 'boards', 'tasks', 'workflow'],
119
- requiredSecrets: ['trello.api_key', 'trello.token'],
120
- requiredTools: [],
121
- skillPath: 'registry/curated/trello/SKILL.md',
122
- namespace: 'wunderland',
123
- source: 'curated',
124
- },
125
- {
126
- name: 'apple-notes',
127
- displayName: 'Apple Notes',
128
- description: 'Create, read, search, and manage notes in Apple Notes using AppleScript and macOS automation.',
129
- category: 'productivity',
130
- tags: ['apple-notes', 'macos', 'notes', 'applescript', 'automation'],
131
- requiredSecrets: [],
132
- requiredTools: ['filesystem'],
133
- skillPath: 'registry/curated/apple-notes/SKILL.md',
134
- namespace: 'wunderland',
135
- source: 'curated',
136
- },
137
- {
138
- name: 'apple-reminders',
139
- displayName: 'Apple Reminders',
140
- description: 'Create, manage, and query reminders and lists in Apple Reminders using AppleScript and macOS automation.',
141
- category: 'productivity',
142
- tags: ['apple-reminders', 'macos', 'reminders', 'tasks', 'applescript', 'automation'],
143
- requiredSecrets: [],
144
- requiredTools: ['filesystem'],
145
- skillPath: 'registry/curated/apple-reminders/SKILL.md',
146
- namespace: 'wunderland',
147
- source: 'curated',
148
- },
149
- // ── DevOps ────────────────────────────────────────────────────────────
150
- {
151
- name: 'healthcheck',
152
- displayName: 'Health Check Monitor',
153
- description: 'Monitor health and availability of systems, services, APIs, and infrastructure endpoints.',
154
- category: 'devops',
155
- tags: ['monitoring', 'health', 'uptime', 'infrastructure', 'diagnostics', 'status'],
156
- requiredSecrets: [],
157
- requiredTools: ['web-search'],
158
- skillPath: 'registry/curated/healthcheck/SKILL.md',
159
- namespace: 'wunderland',
160
- source: 'curated',
161
- },
162
- // ── Media ─────────────────────────────────────────────────────────────
163
- {
164
- name: 'spotify-player',
165
- displayName: 'Spotify Player',
166
- description: 'Control Spotify playback, manage playlists, search music, and get recommendations via the Spotify API.',
167
- category: 'media',
168
- tags: ['spotify', 'music', 'playback', 'playlists', 'streaming', 'audio'],
169
- requiredSecrets: ['spotify.client_id', 'spotify.client_secret', 'spotify.refresh_token'],
170
- requiredTools: [],
171
- skillPath: 'registry/curated/spotify-player/SKILL.md',
172
- namespace: 'wunderland',
173
- source: 'curated',
174
- },
175
- {
176
- name: 'whisper-transcribe',
177
- displayName: 'Whisper Transcription',
178
- description: 'Transcribe audio and video files to text using OpenAI Whisper or compatible speech-to-text APIs.',
179
- category: 'media',
180
- tags: ['transcription', 'whisper', 'speech-to-text', 'audio', 'stt', 'voice'],
181
- requiredSecrets: ['openai.api_key'],
182
- requiredTools: ['filesystem'],
183
- skillPath: 'registry/curated/whisper-transcribe/SKILL.md',
184
- namespace: 'wunderland',
185
- source: 'curated',
186
- },
187
- // ── Security ──────────────────────────────────────────────────────────
188
- {
189
- name: '1password',
190
- displayName: '1Password Vault',
191
- description: 'Query and retrieve items from 1Password vaults using the 1Password CLI for secure credential access.',
192
- category: 'security',
193
- tags: ['1password', 'passwords', 'secrets', 'vault', 'credentials', 'security'],
194
- requiredSecrets: [],
195
- requiredTools: [],
196
- skillPath: 'registry/curated/1password/SKILL.md',
197
- namespace: 'wunderland',
198
- source: 'curated',
199
- },
200
- // ── Creative ──────────────────────────────────────────────────────────
201
- {
202
- name: 'image-gen',
203
- displayName: 'AI Image Generation',
204
- description: 'Generate images from text prompts using AI image generation APIs like DALL-E, Stable Diffusion, or Midjourney.',
205
- category: 'creative',
206
- tags: ['image-generation', 'ai-art', 'dall-e', 'stable-diffusion', 'creative', 'visual'],
207
- requiredSecrets: ['openai.api_key'],
208
- requiredTools: [],
209
- skillPath: 'registry/curated/image-gen/SKILL.md',
210
- namespace: 'wunderland',
211
- source: 'curated',
212
- },
213
- ];
179
+ const require = createRequire(import.meta.url);
180
+ const registry = require('../registry.json');
181
+ function toStringArray(value) {
182
+ if (!Array.isArray(value))
183
+ return [];
184
+ return value.filter((v) => typeof v === 'string' && v.trim().length > 0);
185
+ }
186
+ function slugToDisplayName(slug) {
187
+ return slug
188
+ .split(/[-_]/g)
189
+ .filter(Boolean)
190
+ .map((part) => part[0].toUpperCase() + part.slice(1))
191
+ .join(' ');
192
+ }
193
+ function toCatalogEntry(entry) {
194
+ const skillPath = `${entry.path}/SKILL.md`;
195
+ const entryDisplayName = entry.displayName?.trim() || slugToDisplayName(entry.name);
196
+ return {
197
+ name: entry.name,
198
+ displayName: entryDisplayName,
199
+ description: entry.description ?? '',
200
+ category: entry.category?.trim() || 'uncategorized',
201
+ tags: toStringArray(entry.keywords),
202
+ requiredSecrets: toStringArray(entry.requiredSecrets),
203
+ requiredTools: toStringArray(entry.requiredTools),
204
+ skillPath,
205
+ source: entry.source,
206
+ namespace: entry.namespace?.trim() || 'wunderland',
207
+ available: true,
208
+ loadSkill: createLocalSkillProxy(skillPath, entryDisplayName),
209
+ };
210
+ }
211
+ const curated = (registry.skills?.curated ?? []).map(toCatalogEntry);
212
+ const community = (registry.skills?.community ?? []).map(toCatalogEntry);
213
+ export const SKILLS_CATALOG = [...curated, ...community].sort((a, b) => a.name.localeCompare(b.name));
214
214
  // ============================================================================
215
215
  // QUERY HELPERS
216
216
  // ============================================================================
@@ -276,4 +276,55 @@ export function getCommunitySkills() {
276
276
  export function getAllSkills() {
277
277
  return SKILLS_CATALOG;
278
278
  }
279
+ /**
280
+ * Get skill entries filtered by name.
281
+ *
282
+ * Mirrors `getToolEntries()` from the extensions-registry.
283
+ */
284
+ export function getSkillEntries(names) {
285
+ if (names === 'none')
286
+ return [];
287
+ if (!names || names === 'all')
288
+ return [...SKILLS_CATALOG];
289
+ return SKILLS_CATALOG.filter((entry) => names.includes(entry.name));
290
+ }
291
+ // ============================================================================
292
+ // ON-DEMAND SKILL LOADING
293
+ // ============================================================================
294
+ /**
295
+ * Load a skill by name from the catalog.
296
+ *
297
+ * Finds the entry in SKILLS_CATALOG and calls its `loadSkill()` factory to
298
+ * read and parse the SKILL.md file on demand. Returns `null` if the skill
299
+ * is not found in the catalog.
300
+ *
301
+ * This is the primary consumer-facing API for lazy skill loading, mirroring
302
+ * how the extensions-registry resolves and loads extension packs.
303
+ *
304
+ * @example
305
+ * ```typescript
306
+ * import { loadSkillByName } from '@framers/agentos-skills-registry';
307
+ *
308
+ * const skill = await loadSkillByName('github');
309
+ * if (skill) {
310
+ * console.log(skill.content); // SKILL.md body for injection into prompt
311
+ * }
312
+ * ```
313
+ */
314
+ export async function loadSkillByName(name) {
315
+ const entry = SKILLS_CATALOG.find((s) => s.name === name);
316
+ if (!entry)
317
+ return null;
318
+ return entry.loadSkill();
319
+ }
320
+ /**
321
+ * Load multiple skills by name from the catalog.
322
+ *
323
+ * Convenience wrapper that calls `loadSkillByName()` for each name in parallel.
324
+ * Silently skips skills that are not found in the catalog.
325
+ */
326
+ export async function loadSkillsByNames(names) {
327
+ const results = await Promise.all(names.map((n) => loadSkillByName(n)));
328
+ return results.filter((r) => r !== null);
329
+ }
279
330
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
1
  /**
2
- * @fileoverview AgentOS Skills Registry Bundle.
2
+ * @fileoverview AgentOS Skills Registry.
3
3
  *
4
- * Single-import package that discovers and loads curated AgentOS skills
5
- * from the `@framers/agentos-skills` catalog.
4
+ * Single package containing curated SKILL.md prompt modules, a typed catalog,
5
+ * and lazy-loading factory functions for SkillRegistry/SkillSnapshot.
6
6
  *
7
7
  * `@framers/agentos` is an **optional peer dependency** — the catalog helpers
8
8
  * (re-exported from `./catalog.js`) work without it. Only the factory
@@ -49,11 +49,27 @@ export interface SkillEligibilityContext {
49
49
  hasEnv?: (envVar: string) => boolean;
50
50
  note?: string;
51
51
  }
52
- export { SKILLS_CATALOG, getSkillsByCategory, getSkillByName, getAvailableSkills, getCategories, getSkillsByTag, searchSkills, getCuratedSkills, getCommunitySkills, getAllSkills, } from './catalog.js';
53
- export type { SkillCatalogEntry } from './catalog.js';
52
+ export { SKILLS_CATALOG, getSkillsByCategory, getSkillByName, getAvailableSkills, getCategories, getSkillsByTag, searchSkills, getCuratedSkills, getCommunitySkills, getAllSkills, getSkillEntries, createLocalSkillProxy, loadSkillFromAbsolutePath, loadSkillByName, loadSkillsByNames, } from './catalog.js';
53
+ export type { SkillCatalogEntry, LoadedSkill, LoadedSkillFrontmatter } from './catalog.js';
54
+ import { type LoadedSkillFrontmatter } from './catalog.js';
55
+ import type { SkillMetadata } from './schema-types.js';
56
+ export { discoverWorkspaceSkills, mergeWithWorkspaceSkills, parseSkillFrontmatter, } from './workspace-discovery.js';
57
+ export type { SkillFrontmatter, WorkspaceDiscoveryOptions, } from './workspace-discovery.js';
58
+ export type { SkillInstallKind, SkillInstallSpec, SkillRequirements, SkillMetadata, SkillRegistryEntry, SkillsRegistryStats, SkillsRegistry, } from './schema-types.js';
54
59
  /** Resolved module cache — loaded at most once per process. */
55
60
  declare let _agentosSkillsMod: {
56
61
  SkillRegistry: new (config?: SkillsConfig) => {
62
+ register(entry: {
63
+ skill: {
64
+ name: string;
65
+ description: string;
66
+ content: string;
67
+ };
68
+ frontmatter: LoadedSkillFrontmatter;
69
+ metadata?: SkillMetadata;
70
+ sourcePath?: string;
71
+ source?: string;
72
+ }): boolean;
57
73
  loadFromDirs(dirs: string[]): Promise<number>;
58
74
  loadFromDir?(dir: string, options?: {
59
75
  source?: string;
@@ -66,6 +82,7 @@ declare let _agentosSkillsMod: {
66
82
  runtimeConfig?: Record<string, unknown>;
67
83
  }): SkillSnapshot;
68
84
  };
85
+ extractMetadata?: (frontmatter: LoadedSkillFrontmatter) => SkillMetadata | undefined;
69
86
  } | null;
70
87
  declare function requireAgentOS(): Promise<NonNullable<typeof _agentosSkillsMod>>;
71
88
  /**
@@ -92,13 +109,18 @@ export interface CuratedSkillsOptions {
92
109
  export interface SkillsCatalogEntry {
93
110
  id: string;
94
111
  name: string;
112
+ displayName?: string;
95
113
  version: string;
96
114
  path: string;
97
115
  description: string;
116
+ category?: string;
117
+ namespace?: string;
98
118
  verified: boolean;
99
119
  verifiedAt?: string;
100
120
  keywords?: string[];
101
- metadata?: Record<string, unknown>;
121
+ requiredSecrets?: string[];
122
+ requiredTools?: string[];
123
+ metadata?: SkillMetadata;
102
124
  }
103
125
  export interface SkillsCatalog {
104
126
  version: string;
@@ -114,7 +136,7 @@ export interface SkillsCatalog {
114
136
  stats?: Record<string, unknown>;
115
137
  }
116
138
  /**
117
- * Load the `@framers/agentos-skills` catalog JSON.
139
+ * Load the bundled registry.json catalog.
118
140
  */
119
141
  export declare function getSkillsCatalog(): Promise<SkillsCatalog>;
120
142
  /**
@@ -127,7 +149,7 @@ export declare function getAvailableCuratedSkills(): Promise<SkillsCatalogEntry[
127
149
  * **Requires** `@framers/agentos` as a peer dependency.
128
150
  * Throws a descriptive error if the peer dep is missing.
129
151
  */
130
- export declare function createCuratedSkillRegistry(options?: Pick<CuratedSkillsOptions, 'config'>): Promise<InstanceType<Awaited<ReturnType<typeof requireAgentOS>>['SkillRegistry']>>;
152
+ export declare function createCuratedSkillRegistry(options?: Pick<CuratedSkillsOptions, 'config' | 'skills'>): Promise<InstanceType<Awaited<ReturnType<typeof requireAgentOS>>['SkillRegistry']>>;
131
153
  /**
132
154
  * Build a SkillSnapshot from bundled curated skills.
133
155
  *