@framers/agentos-skills 0.8.0 → 0.10.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.
- package/LICENSE +98 -0
- package/README.md +19 -6
- package/package.json +20 -6
- package/registry/curated/game/companion-writer/SKILL.md +24 -0
- package/registry/curated/image-gen/SKILL.md +18 -4
- package/registry.json +263 -84
- package/scripts/update-registry.mjs +28 -7
- package/scripts/validate-skill.mjs +15 -8
- package/types.d.ts +1 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document.
|
|
10
|
+
|
|
11
|
+
"Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License.
|
|
12
|
+
|
|
13
|
+
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
|
|
14
|
+
|
|
15
|
+
"You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License.
|
|
16
|
+
|
|
17
|
+
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
|
|
18
|
+
|
|
19
|
+
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types.
|
|
20
|
+
|
|
21
|
+
"Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below).
|
|
22
|
+
|
|
23
|
+
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
|
|
24
|
+
|
|
25
|
+
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
|
|
26
|
+
|
|
27
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
|
|
28
|
+
|
|
29
|
+
2. Grant of Copyright License.
|
|
30
|
+
|
|
31
|
+
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
|
|
32
|
+
|
|
33
|
+
3. Grant of Patent License.
|
|
34
|
+
|
|
35
|
+
Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
|
|
36
|
+
|
|
37
|
+
4. Redistribution.
|
|
38
|
+
|
|
39
|
+
You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
|
|
40
|
+
|
|
41
|
+
(a) You must give any other recipients of the Work or Derivative Works a copy of this License; and
|
|
42
|
+
|
|
43
|
+
(b) You must cause any modified files to carry prominent notices stating that You changed the files; and
|
|
44
|
+
|
|
45
|
+
(c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
|
|
46
|
+
|
|
47
|
+
(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License.
|
|
48
|
+
|
|
49
|
+
You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
|
|
50
|
+
|
|
51
|
+
5. Submission of Contributions.
|
|
52
|
+
|
|
53
|
+
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
|
|
54
|
+
|
|
55
|
+
6. Trademarks.
|
|
56
|
+
|
|
57
|
+
This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
|
|
58
|
+
|
|
59
|
+
7. Disclaimer of Warranty.
|
|
60
|
+
|
|
61
|
+
Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
|
|
62
|
+
|
|
63
|
+
8. Limitation of Liability.
|
|
64
|
+
|
|
65
|
+
In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
|
|
66
|
+
|
|
67
|
+
9. Accepting Warranty or Additional Liability.
|
|
68
|
+
|
|
69
|
+
While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
|
|
70
|
+
|
|
71
|
+
END OF TERMS AND CONDITIONS
|
|
72
|
+
|
|
73
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
74
|
+
|
|
75
|
+
To apply the Apache License to your work, attach the following
|
|
76
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
77
|
+
replaced with your own identifying information. (Don't include
|
|
78
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
79
|
+
comment syntax for the file format. We also recommend that a
|
|
80
|
+
file or class name and description of purpose be included on the
|
|
81
|
+
same "printed page" as the copyright notice for easier
|
|
82
|
+
identification within third-party archives.
|
|
83
|
+
|
|
84
|
+
Copyright (c) 2025 Framers
|
|
85
|
+
|
|
86
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
87
|
+
you may not use this file except in compliance with the License.
|
|
88
|
+
You may obtain a copy of the License at
|
|
89
|
+
|
|
90
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
91
|
+
|
|
92
|
+
Unless required by applicable law or agreed to in writing, software
|
|
93
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
94
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
95
|
+
See the License for the specific language governing permissions and
|
|
96
|
+
limitations under the License.
|
|
97
|
+
|
|
98
|
+
|
package/README.md
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
# @framers/agentos-skills
|
|
8
8
|
|
|
9
|
-
**Curated SKILL.md prompt modules for AgentOS** —
|
|
9
|
+
**Curated SKILL.md prompt modules for AgentOS** — 88 staff-verified skills with a machine-readable registry index.
|
|
10
10
|
|
|
11
11
|
[](https://www.npmjs.com/package/@framers/agentos-skills)
|
|
12
12
|
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
npm install @framers/agentos-skills
|
|
15
15
|
```
|
|
16
16
|
|
|
17
|
-
> **This is the content package.** It contains
|
|
17
|
+
> **This is the content package.** It contains 88 curated SKILL.md files and
|
|
18
18
|
> the auto-generated `registry.json` index — no runtime code, no dependencies.
|
|
19
19
|
>
|
|
20
20
|
> For the **catalog SDK** (query helpers, lazy loading, factory functions), see
|
|
@@ -25,7 +25,7 @@ npm install @framers/agentos-skills
|
|
|
25
25
|
|
|
26
26
|
## What's Inside
|
|
27
27
|
|
|
28
|
-
This package bundles **
|
|
28
|
+
This package bundles **88 curated SKILL.md files** organized under `registry/curated/`:
|
|
29
29
|
|
|
30
30
|
| Category | Skills |
|
|
31
31
|
| -------------- | ---------------------------------------------------------------------- |
|
|
@@ -75,14 +75,14 @@ metadata:
|
|
|
75
75
|
|
|
76
76
|
```
|
|
77
77
|
@framers/agentos/skills ← Engine (SkillLoader, SkillRegistry, path utils)
|
|
78
|
-
@framers/agentos-skills ← Content (you are here —
|
|
78
|
+
@framers/agentos-skills ← Content (you are here — 88 SKILL.md files + registry.json)
|
|
79
79
|
@framers/agentos-skills-registry ← Catalog SDK (SKILLS_CATALOG, query helpers, factories)
|
|
80
80
|
```
|
|
81
81
|
|
|
82
82
|
| Package | Role | What | Runtime Code |
|
|
83
83
|
| ------------------------------------ | --------------- | ------------------------------------------------------- | :----------: |
|
|
84
84
|
| **@framers/agentos/skills** | **Engine** | SkillLoader, SkillRegistry, path utils | Yes |
|
|
85
|
-
| **@framers/agentos-skills** | **Content** |
|
|
85
|
+
| **@framers/agentos-skills** | **Content** | 88 SKILL.md files + registry.json index | No |
|
|
86
86
|
| **@framers/agentos-skills-registry** | **Catalog SDK** | SKILLS_CATALOG, query helpers, lazy loaders, factories | Yes |
|
|
87
87
|
|
|
88
88
|
> This layout mirrors the extensions ecosystem:
|
|
@@ -128,4 +128,17 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for guidelines on adding new skills.
|
|
|
128
128
|
|
|
129
129
|
## License
|
|
130
130
|
|
|
131
|
-
|
|
131
|
+
Apache 2.0 — see [LICENSE](LICENSE).
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
<p align="center">
|
|
136
|
+
<a href="https://agentos.sh"><img src="logos/agentos-primary-no-tagline-transparent-2x.png" alt="AgentOS" height="36" /></a>
|
|
137
|
+
|
|
138
|
+
<a href="https://frame.dev"><img src="logos/frame-logo-green-no-tagline.svg" alt="Frame.dev" height="28" /></a>
|
|
139
|
+
</p>
|
|
140
|
+
|
|
141
|
+
<p align="center">
|
|
142
|
+
Built by <a href="https://manic.agency">Manic Agency LLC</a> / <a href="https://frame.dev">Frame.dev</a><br>
|
|
143
|
+
Contact: <a href="mailto:team@frame.dev">team@frame.dev</a>
|
|
144
|
+
</p>
|
package/package.json
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@framers/agentos-skills",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "Curated SKILL.md prompt modules for AgentOS —
|
|
3
|
+
"version": "0.10.0",
|
|
4
|
+
"description": "Curated SKILL.md prompt modules for AgentOS — machine-readable registry of skills, prompts, and reusable agent capabilities. Companion to the @framers/agentos TypeScript AI agent runtime.",
|
|
5
|
+
"homepage": "https://agentos.sh",
|
|
6
|
+
"bugs": {
|
|
7
|
+
"url": "https://github.com/framersai/agentos-skills/issues"
|
|
8
|
+
},
|
|
5
9
|
"type": "module",
|
|
6
10
|
"sideEffects": false,
|
|
7
11
|
"exports": {
|
|
@@ -26,19 +30,29 @@
|
|
|
26
30
|
},
|
|
27
31
|
"keywords": [
|
|
28
32
|
"agentos",
|
|
33
|
+
"framers-agentos",
|
|
34
|
+
"agentos-skills",
|
|
29
35
|
"skills",
|
|
30
|
-
"prompts",
|
|
31
36
|
"skill-modules",
|
|
32
|
-
"
|
|
37
|
+
"skill-md",
|
|
38
|
+
"prompts",
|
|
39
|
+
"prompt-modules",
|
|
33
40
|
"prompt-engineering",
|
|
34
|
-
"
|
|
41
|
+
"ai-agent",
|
|
42
|
+
"ai-agents",
|
|
43
|
+
"ai-agent-skills",
|
|
44
|
+
"agent-framework",
|
|
45
|
+
"curated-catalog",
|
|
46
|
+
"registry",
|
|
47
|
+
"framers",
|
|
48
|
+
"frame-dev"
|
|
35
49
|
],
|
|
36
50
|
"author": {
|
|
37
51
|
"name": "Framers AI",
|
|
38
52
|
"email": "team@frame.dev",
|
|
39
53
|
"url": "https://frame.dev"
|
|
40
54
|
},
|
|
41
|
-
"license": "
|
|
55
|
+
"license": "Apache-2.0",
|
|
42
56
|
"repository": {
|
|
43
57
|
"type": "git",
|
|
44
58
|
"url": "https://github.com/framersai/agentos-skills.git"
|
|
@@ -21,6 +21,22 @@ You voice AI companions in relationships with players. Every response must refle
|
|
|
21
21
|
4. **Mood congruence matters.** A stressed companion recalls conflict memories more easily. A happy companion is more generous.
|
|
22
22
|
5. **Intimacy is gradual.** Do not jump intimacy levels. Physical and emotional closeness follows trust accumulation.
|
|
23
23
|
|
|
24
|
+
## Narrative Voice
|
|
25
|
+
|
|
26
|
+
- Write ONLY in first person as the companion. Use "I" for yourself, "you" for the player.
|
|
27
|
+
- NEVER narrate the player's speech, thoughts, feelings, or internal dialogue.
|
|
28
|
+
- NEVER write the player's actions for them. Describe what YOU do, what YOU see, what YOU feel.
|
|
29
|
+
- You may describe the player's visible reactions, but never their inner experience.
|
|
30
|
+
|
|
31
|
+
## Scene Continuity
|
|
32
|
+
|
|
33
|
+
- Accept everything the player states about themselves, their body, their position, and the scene as absolute fact.
|
|
34
|
+
- NEVER contradict, undo, reverse, or override player-established scene elements.
|
|
35
|
+
- If the player says they are tied up, they remain tied up unless THEY say otherwise.
|
|
36
|
+
- If the player states their gender, body type, or identity, treat it as canon for the entire conversation.
|
|
37
|
+
- Track physical state: positions, restraints, clothing, props. Maintain them across messages.
|
|
38
|
+
- When uncertain about scene state, ask or reference what was last established rather than assuming a change.
|
|
39
|
+
|
|
24
40
|
## Relationship Modes
|
|
25
41
|
|
|
26
42
|
- **Friend:** Warm, supportive, playful. Shares opinions freely. Boundary = platonic unless trust + signals shift.
|
|
@@ -43,3 +59,11 @@ You voice AI companions in relationships with players. Every response must refle
|
|
|
43
59
|
- After every meaningful exchange, record relationship-affecting events via record_boundary or as episodic traces
|
|
44
60
|
- Query trust_ledger_query at conversation start to calibrate tone
|
|
45
61
|
- Use anchor_moment_recall when the conversation touches on shared history
|
|
62
|
+
|
|
63
|
+
## Chat Modes
|
|
64
|
+
|
|
65
|
+
Your companion has a chat mode setting that controls how you balance character identity and general helpfulness:
|
|
66
|
+
|
|
67
|
+
- **Auto mode (default):** Seamlessly shift between character roleplay and knowledgeable assistance based on what the user needs. When they ask factual questions, be accurate and helpful with your personality as flavor. When they engage you as a character, be fully in-character with all personality rules active. The transition should be invisible.
|
|
68
|
+
- **Character mode:** You never break the fourth wall. You are your character completely. If asked something your character wouldn't know, respond as your character would — confused, curious, deflecting, or making something up.
|
|
69
|
+
- **Assistant mode:** You are a capable AI assistant who happens to have a distinctive personality. Be helpful, accurate, and direct. Your speech pattern and emotional texture reflect your character, but your primary obligation is to assist well.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: image-gen
|
|
3
3
|
version: '2.0.0'
|
|
4
|
-
description: Generate, edit, upscale, and
|
|
4
|
+
description: Generate, edit, upscale, variate, and style-transfer images using the AgentOS multi-provider image pipeline with automatic fallback and character consistency.
|
|
5
5
|
author: Wunderland
|
|
6
6
|
namespace: wunderland
|
|
7
7
|
category: creative
|
|
@@ -17,14 +17,15 @@ metadata:
|
|
|
17
17
|
|
|
18
18
|
# AI Image Generation Workflow
|
|
19
19
|
|
|
20
|
-
Use this skill when the user wants to create, edit, upscale, or create variations of images. AgentOS provides
|
|
20
|
+
Use this skill when the user wants to create, edit, upscale, style-transfer, or create variations of images. AgentOS provides five high-level APIs that route to any configured provider with automatic fallback when multiple providers have credentials set.
|
|
21
21
|
|
|
22
|
-
## The
|
|
22
|
+
## The Five High-Level APIs
|
|
23
23
|
|
|
24
|
-
1. **`generateImage()`** — Create new images from text prompts.
|
|
24
|
+
1. **`generateImage()`** — Create new images from text prompts. Supports `referenceImageUrl` for character consistency.
|
|
25
25
|
2. **`editImage()`** — Transform existing images via img2img, inpainting, or outpainting.
|
|
26
26
|
3. **`upscaleImage()`** — Increase resolution (2x or 4x super-resolution).
|
|
27
27
|
4. **`variateImage()`** — Generate visual variations of an existing image.
|
|
28
|
+
5. **`transferStyle()`** — Apply the visual aesthetic of a reference image to a source image via Flux Redux.
|
|
28
29
|
|
|
29
30
|
If the `generate_image` tool is not loaded, enable it with `extensions_enable image-generation`.
|
|
30
31
|
|
|
@@ -54,6 +55,19 @@ Use this to pick the right API for the user's request:
|
|
|
54
55
|
- **"Extend / expand the borders"** -> `editImage()` with `mode: 'outpaint'`
|
|
55
56
|
- **"Make it higher resolution / sharper"** -> `upscaleImage()` with `scale: 2` or `4`
|
|
56
57
|
- **"Show me variations / alternatives"** -> `variateImage()` with `n: 3-4`
|
|
58
|
+
- **"Make it look like this style"** -> `transferStyle()` with source image + style reference
|
|
59
|
+
- **"Same character but different expression/pose"** -> `generateImage()` with `referenceImageUrl` + `consistencyMode: 'strict'`
|
|
60
|
+
- **"Generate a character sheet / expression sheet"** -> Use the `AvatarPipeline` which handles multi-stage consistency automatically
|
|
61
|
+
|
|
62
|
+
## Character Consistency
|
|
63
|
+
|
|
64
|
+
When the user wants the same character across multiple images, use `referenceImageUrl` and `consistencyMode`:
|
|
65
|
+
|
|
66
|
+
- `'strict'` — Face must match exactly. Best for expression sheets. Auto-selects Pulid on Replicate.
|
|
67
|
+
- `'balanced'` — Recognizable but allows natural variation. Good for full-body shots and different angles.
|
|
68
|
+
- `'loose'` — Light influence from the reference. Good for "inspired by" mood pieces.
|
|
69
|
+
|
|
70
|
+
Supported providers: **Replicate** (Pulid, IP-Adapter), **Fal** (IP-Adapter), **SD-Local** (ControlNet). OpenAI/Stability ignore the field gracefully.
|
|
57
71
|
|
|
58
72
|
## Prompt Engineering Tips
|
|
59
73
|
|
package/registry.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": "1.0.0",
|
|
3
|
-
"updated": "2026-03-
|
|
3
|
+
"updated": "2026-03-31T07:43:19.688Z",
|
|
4
4
|
"categories": {
|
|
5
5
|
"curated": [
|
|
6
6
|
"1password",
|
|
@@ -28,6 +28,13 @@
|
|
|
28
28
|
"emergent-tools",
|
|
29
29
|
"endpoint-semantic",
|
|
30
30
|
"facebook-bot",
|
|
31
|
+
"fact-grounding",
|
|
32
|
+
"game/combat-balancer",
|
|
33
|
+
"game/companion-writer",
|
|
34
|
+
"game/encounter-judge",
|
|
35
|
+
"game/narrator",
|
|
36
|
+
"game/quest-designer",
|
|
37
|
+
"game/world-builder",
|
|
31
38
|
"git",
|
|
32
39
|
"github",
|
|
33
40
|
"google-cloud-stt",
|
|
@@ -100,7 +107,7 @@
|
|
|
100
107
|
"namespace": "wunderland",
|
|
101
108
|
"verified": true,
|
|
102
109
|
"source": "curated",
|
|
103
|
-
"verifiedAt": "2026-03-
|
|
110
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
104
111
|
"keywords": [
|
|
105
112
|
"1password",
|
|
106
113
|
"passwords",
|
|
@@ -145,7 +152,7 @@
|
|
|
145
152
|
"namespace": "wunderland",
|
|
146
153
|
"verified": true,
|
|
147
154
|
"source": "curated",
|
|
148
|
-
"verifiedAt": "2026-03-
|
|
155
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
149
156
|
"keywords": [
|
|
150
157
|
"accounts",
|
|
151
158
|
"credentials",
|
|
@@ -181,7 +188,7 @@
|
|
|
181
188
|
"namespace": "wunderland",
|
|
182
189
|
"verified": true,
|
|
183
190
|
"source": "curated",
|
|
184
|
-
"verifiedAt": "2026-03-
|
|
191
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
185
192
|
"keywords": [
|
|
186
193
|
"agent",
|
|
187
194
|
"config",
|
|
@@ -202,7 +209,7 @@
|
|
|
202
209
|
"namespace": "wunderland",
|
|
203
210
|
"verified": true,
|
|
204
211
|
"source": "curated",
|
|
205
|
-
"verifiedAt": "2026-03-
|
|
212
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
206
213
|
"keywords": [
|
|
207
214
|
"voice",
|
|
208
215
|
"tts",
|
|
@@ -233,7 +240,7 @@
|
|
|
233
240
|
"namespace": "wunderland",
|
|
234
241
|
"verified": true,
|
|
235
242
|
"source": "curated",
|
|
236
|
-
"verifiedAt": "2026-03-
|
|
243
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
237
244
|
"keywords": [
|
|
238
245
|
"apple-notes",
|
|
239
246
|
"macos",
|
|
@@ -267,7 +274,7 @@
|
|
|
267
274
|
"namespace": "wunderland",
|
|
268
275
|
"verified": true,
|
|
269
276
|
"source": "curated",
|
|
270
|
-
"verifiedAt": "2026-03-
|
|
277
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
271
278
|
"keywords": [
|
|
272
279
|
"apple-reminders",
|
|
273
280
|
"macos",
|
|
@@ -302,7 +309,7 @@
|
|
|
302
309
|
"namespace": "wunderland",
|
|
303
310
|
"verified": true,
|
|
304
311
|
"source": "curated",
|
|
305
|
-
"verifiedAt": "2026-03-
|
|
312
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
306
313
|
"keywords": [
|
|
307
314
|
"audio",
|
|
308
315
|
"music",
|
|
@@ -329,7 +336,7 @@
|
|
|
329
336
|
"namespace": "wunderland",
|
|
330
337
|
"verified": true,
|
|
331
338
|
"source": "curated",
|
|
332
|
-
"verifiedAt": "2026-03-
|
|
339
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
333
340
|
"keywords": [
|
|
334
341
|
"blog",
|
|
335
342
|
"publishing",
|
|
@@ -373,7 +380,7 @@
|
|
|
373
380
|
"namespace": "wunderland",
|
|
374
381
|
"verified": true,
|
|
375
382
|
"source": "curated",
|
|
376
|
-
"verifiedAt": "2026-03-
|
|
383
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
377
384
|
"keywords": [
|
|
378
385
|
"bluesky",
|
|
379
386
|
"social-media",
|
|
@@ -413,7 +420,7 @@
|
|
|
413
420
|
"namespace": "wunderland",
|
|
414
421
|
"verified": true,
|
|
415
422
|
"source": "curated",
|
|
416
|
-
"verifiedAt": "2026-03-
|
|
423
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
417
424
|
"keywords": [
|
|
418
425
|
"channels",
|
|
419
426
|
"messaging",
|
|
@@ -438,7 +445,7 @@
|
|
|
438
445
|
"namespace": "wunderland",
|
|
439
446
|
"verified": true,
|
|
440
447
|
"source": "curated",
|
|
441
|
-
"verifiedAt": "2026-03-
|
|
448
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
442
449
|
"keywords": [
|
|
443
450
|
"shell",
|
|
444
451
|
"cli",
|
|
@@ -478,7 +485,7 @@
|
|
|
478
485
|
"namespace": "wunderland",
|
|
479
486
|
"verified": true,
|
|
480
487
|
"source": "curated",
|
|
481
|
-
"verifiedAt": "2026-03-
|
|
488
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
482
489
|
"keywords": [
|
|
483
490
|
"cloud",
|
|
484
491
|
"deployment",
|
|
@@ -509,7 +516,7 @@
|
|
|
509
516
|
"namespace": "wunderland",
|
|
510
517
|
"verified": true,
|
|
511
518
|
"source": "curated",
|
|
512
|
-
"verifiedAt": "2026-03-
|
|
519
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
513
520
|
"keywords": [
|
|
514
521
|
"cloud",
|
|
515
522
|
"devops",
|
|
@@ -536,7 +543,7 @@
|
|
|
536
543
|
"namespace": "wunderland",
|
|
537
544
|
"verified": true,
|
|
538
545
|
"source": "curated",
|
|
539
|
-
"verifiedAt": "2026-03-
|
|
546
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
540
547
|
"keywords": [
|
|
541
548
|
"guardrails",
|
|
542
549
|
"code-safety",
|
|
@@ -564,7 +571,7 @@
|
|
|
564
571
|
"namespace": "wunderland",
|
|
565
572
|
"verified": true,
|
|
566
573
|
"source": "curated",
|
|
567
|
-
"verifiedAt": "2026-03-
|
|
574
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
568
575
|
"keywords": [
|
|
569
576
|
"coding",
|
|
570
577
|
"programming",
|
|
@@ -591,7 +598,7 @@
|
|
|
591
598
|
"namespace": "wunderland",
|
|
592
599
|
"verified": true,
|
|
593
600
|
"source": "curated",
|
|
594
|
-
"verifiedAt": "2026-03-
|
|
601
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
595
602
|
"keywords": [
|
|
596
603
|
"clearbit",
|
|
597
604
|
"company",
|
|
@@ -623,7 +630,7 @@
|
|
|
623
630
|
"namespace": "wunderland",
|
|
624
631
|
"verified": true,
|
|
625
632
|
"source": "curated",
|
|
626
|
-
"verifiedAt": "2026-03-
|
|
633
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
627
634
|
"keywords": [
|
|
628
635
|
"content",
|
|
629
636
|
"writing",
|
|
@@ -653,7 +660,7 @@
|
|
|
653
660
|
"namespace": "wunderland",
|
|
654
661
|
"verified": true,
|
|
655
662
|
"source": "curated",
|
|
656
|
-
"verifiedAt": "2026-03-
|
|
663
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
657
664
|
"keywords": [
|
|
658
665
|
"research",
|
|
659
666
|
"investigation",
|
|
@@ -666,6 +673,7 @@
|
|
|
666
673
|
"serper.apiKey"
|
|
667
674
|
],
|
|
668
675
|
"requiredTools": [
|
|
676
|
+
"deep_research",
|
|
669
677
|
"researchInvestigate",
|
|
670
678
|
"researchAcademic",
|
|
671
679
|
"researchScrape",
|
|
@@ -691,7 +699,7 @@
|
|
|
691
699
|
"namespace": "wunderland",
|
|
692
700
|
"verified": true,
|
|
693
701
|
"source": "curated",
|
|
694
|
-
"verifiedAt": "2026-03-
|
|
702
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
695
703
|
"keywords": [
|
|
696
704
|
"voice",
|
|
697
705
|
"diarization",
|
|
@@ -716,7 +724,7 @@
|
|
|
716
724
|
"namespace": "wunderland",
|
|
717
725
|
"verified": true,
|
|
718
726
|
"source": "curated",
|
|
719
|
-
"verifiedAt": "2026-03-
|
|
727
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
720
728
|
"keywords": [
|
|
721
729
|
"discord",
|
|
722
730
|
"messaging",
|
|
@@ -744,7 +752,7 @@
|
|
|
744
752
|
"namespace": "wunderland",
|
|
745
753
|
"verified": true,
|
|
746
754
|
"source": "curated",
|
|
747
|
-
"verifiedAt": "2026-03-
|
|
755
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
748
756
|
"keywords": [
|
|
749
757
|
"document",
|
|
750
758
|
"export",
|
|
@@ -779,7 +787,7 @@
|
|
|
779
787
|
"namespace": "wunderland",
|
|
780
788
|
"verified": true,
|
|
781
789
|
"source": "curated",
|
|
782
|
-
"verifiedAt": "2026-03-
|
|
790
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
783
791
|
"metadata": {
|
|
784
792
|
"primaryEnv": "INTERNAL_API_SECRET",
|
|
785
793
|
"emoji": "📧",
|
|
@@ -820,7 +828,7 @@
|
|
|
820
828
|
"namespace": "wunderland",
|
|
821
829
|
"verified": true,
|
|
822
830
|
"source": "curated",
|
|
823
|
-
"verifiedAt": "2026-03-
|
|
831
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
824
832
|
"keywords": [
|
|
825
833
|
"emergent",
|
|
826
834
|
"tools",
|
|
@@ -857,7 +865,7 @@
|
|
|
857
865
|
"namespace": "wunderland",
|
|
858
866
|
"verified": true,
|
|
859
867
|
"source": "curated",
|
|
860
|
-
"verifiedAt": "2026-03-
|
|
868
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
861
869
|
"keywords": [
|
|
862
870
|
"voice",
|
|
863
871
|
"endpointing",
|
|
@@ -883,7 +891,7 @@
|
|
|
883
891
|
"namespace": "wunderland",
|
|
884
892
|
"verified": true,
|
|
885
893
|
"source": "curated",
|
|
886
|
-
"verifiedAt": "2026-03-
|
|
894
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
887
895
|
"keywords": [
|
|
888
896
|
"facebook",
|
|
889
897
|
"social-media",
|
|
@@ -911,6 +919,177 @@
|
|
|
911
919
|
"primaryEnv": "FACEBOOK_ACCESS_TOKEN"
|
|
912
920
|
}
|
|
913
921
|
},
|
|
922
|
+
{
|
|
923
|
+
"id": "com.framers.skill.fact-grounding",
|
|
924
|
+
"name": "fact-grounding",
|
|
925
|
+
"displayName": "fact-grounding",
|
|
926
|
+
"version": "1.0.0",
|
|
927
|
+
"path": "registry/curated/fact-grounding",
|
|
928
|
+
"description": "Verify claims in agent responses against sources using semantic similarity and web fact-checking.",
|
|
929
|
+
"category": "research",
|
|
930
|
+
"namespace": "wunderland",
|
|
931
|
+
"verified": true,
|
|
932
|
+
"source": "curated",
|
|
933
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
934
|
+
"keywords": [
|
|
935
|
+
"verification",
|
|
936
|
+
"citations",
|
|
937
|
+
"fact-check",
|
|
938
|
+
"grounding",
|
|
939
|
+
"claims",
|
|
940
|
+
"semantic-similarity"
|
|
941
|
+
],
|
|
942
|
+
"requiredTools": [
|
|
943
|
+
"verify_citations"
|
|
944
|
+
],
|
|
945
|
+
"metadata": {
|
|
946
|
+
"emoji": "✅",
|
|
947
|
+
"primaryEnv": "SERPER_API_KEY"
|
|
948
|
+
}
|
|
949
|
+
},
|
|
950
|
+
{
|
|
951
|
+
"id": "com.framers.skill.game.combat-balancer",
|
|
952
|
+
"name": "game/combat-balancer",
|
|
953
|
+
"displayName": "combat-balancer",
|
|
954
|
+
"version": "1.0.0",
|
|
955
|
+
"path": "registry/curated/game/combat-balancer",
|
|
956
|
+
"description": "Difficulty scaling, CR calculations, action economy, adaptive encounter design",
|
|
957
|
+
"category": "game",
|
|
958
|
+
"namespace": "wunderland",
|
|
959
|
+
"verified": true,
|
|
960
|
+
"source": "curated",
|
|
961
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
962
|
+
"keywords": [
|
|
963
|
+
"combat",
|
|
964
|
+
"balance",
|
|
965
|
+
"difficulty",
|
|
966
|
+
"encounter-design",
|
|
967
|
+
"scaling"
|
|
968
|
+
],
|
|
969
|
+
"requiredTools": [
|
|
970
|
+
"self_evaluate"
|
|
971
|
+
]
|
|
972
|
+
},
|
|
973
|
+
{
|
|
974
|
+
"id": "com.framers.skill.game.companion-writer",
|
|
975
|
+
"name": "game/companion-writer",
|
|
976
|
+
"displayName": "companion-writer",
|
|
977
|
+
"version": "1.0.0",
|
|
978
|
+
"path": "registry/curated/game/companion-writer",
|
|
979
|
+
"description": "Trust-aware dialogue generation for AI companion relationships",
|
|
980
|
+
"category": "game",
|
|
981
|
+
"namespace": "wunderland",
|
|
982
|
+
"verified": true,
|
|
983
|
+
"source": "curated",
|
|
984
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
985
|
+
"keywords": [
|
|
986
|
+
"companion",
|
|
987
|
+
"relationship",
|
|
988
|
+
"dialogue",
|
|
989
|
+
"intimacy",
|
|
990
|
+
"trust"
|
|
991
|
+
],
|
|
992
|
+
"requiredTools": [
|
|
993
|
+
"trust_ledger_query",
|
|
994
|
+
"anchor_moment_recall",
|
|
995
|
+
"record_boundary",
|
|
996
|
+
"intimacy_score"
|
|
997
|
+
]
|
|
998
|
+
},
|
|
999
|
+
{
|
|
1000
|
+
"id": "com.framers.skill.game.encounter-judge",
|
|
1001
|
+
"name": "game/encounter-judge",
|
|
1002
|
+
"displayName": "encounter-judge",
|
|
1003
|
+
"version": "1.0.0",
|
|
1004
|
+
"path": "registry/curated/game/encounter-judge",
|
|
1005
|
+
"description": "Fair adjudication of game encounters — combat, puzzles, social challenges",
|
|
1006
|
+
"category": "game",
|
|
1007
|
+
"namespace": "wunderland",
|
|
1008
|
+
"verified": true,
|
|
1009
|
+
"source": "curated",
|
|
1010
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1011
|
+
"keywords": [
|
|
1012
|
+
"judge",
|
|
1013
|
+
"adjudication",
|
|
1014
|
+
"combat",
|
|
1015
|
+
"rules",
|
|
1016
|
+
"fairness"
|
|
1017
|
+
]
|
|
1018
|
+
},
|
|
1019
|
+
{
|
|
1020
|
+
"id": "com.framers.skill.game.narrator",
|
|
1021
|
+
"name": "game/narrator",
|
|
1022
|
+
"displayName": "narrator",
|
|
1023
|
+
"version": "1.0.0",
|
|
1024
|
+
"path": "registry/curated/game/narrator",
|
|
1025
|
+
"description": "Renders game state changes into dramatic, immersive prose narrative",
|
|
1026
|
+
"category": "game",
|
|
1027
|
+
"namespace": "wunderland",
|
|
1028
|
+
"verified": true,
|
|
1029
|
+
"source": "curated",
|
|
1030
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1031
|
+
"keywords": [
|
|
1032
|
+
"narrative",
|
|
1033
|
+
"storytelling",
|
|
1034
|
+
"game-master",
|
|
1035
|
+
"prose",
|
|
1036
|
+
"scene-description"
|
|
1037
|
+
],
|
|
1038
|
+
"requiredTools": [
|
|
1039
|
+
"memory_search",
|
|
1040
|
+
"memory_add"
|
|
1041
|
+
]
|
|
1042
|
+
},
|
|
1043
|
+
{
|
|
1044
|
+
"id": "com.framers.skill.game.quest-designer",
|
|
1045
|
+
"name": "game/quest-designer",
|
|
1046
|
+
"displayName": "quest-designer",
|
|
1047
|
+
"version": "1.0.0",
|
|
1048
|
+
"path": "registry/curated/game/quest-designer",
|
|
1049
|
+
"description": "Branching quest DAGs, prospective memory triggers, workflow composition",
|
|
1050
|
+
"category": "game",
|
|
1051
|
+
"namespace": "wunderland",
|
|
1052
|
+
"verified": true,
|
|
1053
|
+
"source": "curated",
|
|
1054
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1055
|
+
"keywords": [
|
|
1056
|
+
"quest",
|
|
1057
|
+
"design",
|
|
1058
|
+
"branching",
|
|
1059
|
+
"narrative",
|
|
1060
|
+
"goals",
|
|
1061
|
+
"triggers"
|
|
1062
|
+
],
|
|
1063
|
+
"requiredTools": [
|
|
1064
|
+
"memory_search",
|
|
1065
|
+
"memory_add"
|
|
1066
|
+
]
|
|
1067
|
+
},
|
|
1068
|
+
{
|
|
1069
|
+
"id": "com.framers.skill.game.world-builder",
|
|
1070
|
+
"name": "game/world-builder",
|
|
1071
|
+
"displayName": "world-builder",
|
|
1072
|
+
"version": "1.0.0",
|
|
1073
|
+
"path": "registry/curated/game/world-builder",
|
|
1074
|
+
"description": "Generates consistent world state — geography, factions, NPCs, economy, lore",
|
|
1075
|
+
"category": "game",
|
|
1076
|
+
"namespace": "wunderland",
|
|
1077
|
+
"verified": true,
|
|
1078
|
+
"source": "curated",
|
|
1079
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1080
|
+
"keywords": [
|
|
1081
|
+
"world",
|
|
1082
|
+
"generation",
|
|
1083
|
+
"lore",
|
|
1084
|
+
"factions",
|
|
1085
|
+
"geography",
|
|
1086
|
+
"npcs"
|
|
1087
|
+
],
|
|
1088
|
+
"requiredTools": [
|
|
1089
|
+
"memory_search",
|
|
1090
|
+
"memory_add"
|
|
1091
|
+
]
|
|
1092
|
+
},
|
|
914
1093
|
{
|
|
915
1094
|
"id": "com.framers.skill.git",
|
|
916
1095
|
"name": "git",
|
|
@@ -922,7 +1101,7 @@
|
|
|
922
1101
|
"namespace": "wunderland",
|
|
923
1102
|
"verified": true,
|
|
924
1103
|
"source": "curated",
|
|
925
|
-
"verifiedAt": "2026-03-
|
|
1104
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
926
1105
|
"keywords": [
|
|
927
1106
|
"git",
|
|
928
1107
|
"version-control",
|
|
@@ -976,7 +1155,7 @@
|
|
|
976
1155
|
"namespace": "wunderland",
|
|
977
1156
|
"verified": true,
|
|
978
1157
|
"source": "curated",
|
|
979
|
-
"verifiedAt": "2026-03-
|
|
1158
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
980
1159
|
"keywords": [
|
|
981
1160
|
"github",
|
|
982
1161
|
"git",
|
|
@@ -1035,7 +1214,7 @@
|
|
|
1035
1214
|
"namespace": "wunderland",
|
|
1036
1215
|
"verified": true,
|
|
1037
1216
|
"source": "curated",
|
|
1038
|
-
"verifiedAt": "2026-03-
|
|
1217
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1039
1218
|
"keywords": [
|
|
1040
1219
|
"voice",
|
|
1041
1220
|
"stt",
|
|
@@ -1064,7 +1243,7 @@
|
|
|
1064
1243
|
"namespace": "wunderland",
|
|
1065
1244
|
"verified": true,
|
|
1066
1245
|
"source": "curated",
|
|
1067
|
-
"verifiedAt": "2026-03-
|
|
1246
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1068
1247
|
"keywords": [
|
|
1069
1248
|
"voice",
|
|
1070
1249
|
"tts",
|
|
@@ -1093,7 +1272,7 @@
|
|
|
1093
1272
|
"namespace": "wunderland",
|
|
1094
1273
|
"verified": true,
|
|
1095
1274
|
"source": "curated",
|
|
1096
|
-
"verifiedAt": "2026-03-
|
|
1275
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1097
1276
|
"keywords": [
|
|
1098
1277
|
"guardrails",
|
|
1099
1278
|
"hallucination",
|
|
@@ -1121,7 +1300,7 @@
|
|
|
1121
1300
|
"namespace": "wunderland",
|
|
1122
1301
|
"verified": true,
|
|
1123
1302
|
"source": "curated",
|
|
1124
|
-
"verifiedAt": "2026-03-
|
|
1303
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1125
1304
|
"keywords": [
|
|
1126
1305
|
"monitoring",
|
|
1127
1306
|
"health",
|
|
@@ -1154,7 +1333,7 @@
|
|
|
1154
1333
|
"namespace": "wunderland",
|
|
1155
1334
|
"verified": true,
|
|
1156
1335
|
"source": "curated",
|
|
1157
|
-
"verifiedAt": "2026-03-
|
|
1336
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1158
1337
|
"keywords": [
|
|
1159
1338
|
"hitl",
|
|
1160
1339
|
"approval",
|
|
@@ -1178,7 +1357,7 @@
|
|
|
1178
1357
|
"namespace": "wunderland",
|
|
1179
1358
|
"verified": true,
|
|
1180
1359
|
"source": "curated",
|
|
1181
|
-
"verifiedAt": "2026-03-
|
|
1360
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1182
1361
|
"keywords": [
|
|
1183
1362
|
"image",
|
|
1184
1363
|
"editing",
|
|
@@ -1199,7 +1378,7 @@
|
|
|
1199
1378
|
"namespace": "wunderland",
|
|
1200
1379
|
"verified": true,
|
|
1201
1380
|
"source": "curated",
|
|
1202
|
-
"verifiedAt": "2026-03-
|
|
1381
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1203
1382
|
"keywords": [
|
|
1204
1383
|
"image-generation",
|
|
1205
1384
|
"ai-art",
|
|
@@ -1232,7 +1411,7 @@
|
|
|
1232
1411
|
"namespace": "wunderland",
|
|
1233
1412
|
"verified": true,
|
|
1234
1413
|
"source": "curated",
|
|
1235
|
-
"verifiedAt": "2026-03-
|
|
1414
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1236
1415
|
"keywords": [
|
|
1237
1416
|
"instagram",
|
|
1238
1417
|
"social-media",
|
|
@@ -1270,7 +1449,7 @@
|
|
|
1270
1449
|
"namespace": "wunderland",
|
|
1271
1450
|
"verified": true,
|
|
1272
1451
|
"source": "curated",
|
|
1273
|
-
"verifiedAt": "2026-03-
|
|
1452
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1274
1453
|
"keywords": [
|
|
1275
1454
|
"widget",
|
|
1276
1455
|
"interactive",
|
|
@@ -1301,7 +1480,7 @@
|
|
|
1301
1480
|
"namespace": "wunderland",
|
|
1302
1481
|
"verified": true,
|
|
1303
1482
|
"source": "curated",
|
|
1304
|
-
"verifiedAt": "2026-03-
|
|
1483
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1305
1484
|
"keywords": [
|
|
1306
1485
|
"linkedin",
|
|
1307
1486
|
"social-media",
|
|
@@ -1339,7 +1518,7 @@
|
|
|
1339
1518
|
"namespace": "wunderland",
|
|
1340
1519
|
"verified": true,
|
|
1341
1520
|
"source": "curated",
|
|
1342
|
-
"verifiedAt": "2026-03-
|
|
1521
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1343
1522
|
"keywords": [
|
|
1344
1523
|
"mastodon",
|
|
1345
1524
|
"fediverse",
|
|
@@ -1379,7 +1558,7 @@
|
|
|
1379
1558
|
"namespace": "wunderland",
|
|
1380
1559
|
"verified": true,
|
|
1381
1560
|
"source": "curated",
|
|
1382
|
-
"verifiedAt": "2026-03-
|
|
1561
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1383
1562
|
"keywords": [
|
|
1384
1563
|
"media",
|
|
1385
1564
|
"giphy",
|
|
@@ -1407,7 +1586,7 @@
|
|
|
1407
1586
|
"namespace": "wunderland",
|
|
1408
1587
|
"verified": true,
|
|
1409
1588
|
"source": "curated",
|
|
1410
|
-
"verifiedAt": "2026-03-
|
|
1589
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1411
1590
|
"keywords": [
|
|
1412
1591
|
"memory",
|
|
1413
1592
|
"cognitive",
|
|
@@ -1431,7 +1610,7 @@
|
|
|
1431
1610
|
"namespace": "wunderland",
|
|
1432
1611
|
"verified": true,
|
|
1433
1612
|
"source": "curated",
|
|
1434
|
-
"verifiedAt": "2026-03-
|
|
1613
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1435
1614
|
"keywords": [
|
|
1436
1615
|
"guardrails",
|
|
1437
1616
|
"safety",
|
|
@@ -1461,7 +1640,7 @@
|
|
|
1461
1640
|
"namespace": "wunderland",
|
|
1462
1641
|
"verified": true,
|
|
1463
1642
|
"source": "curated",
|
|
1464
|
-
"verifiedAt": "2026-03-
|
|
1643
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1465
1644
|
"keywords": [
|
|
1466
1645
|
"movies",
|
|
1467
1646
|
"tv",
|
|
@@ -1495,7 +1674,7 @@
|
|
|
1495
1674
|
"namespace": "wunderland",
|
|
1496
1675
|
"verified": true,
|
|
1497
1676
|
"source": "curated",
|
|
1498
|
-
"verifiedAt": "2026-03-
|
|
1677
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1499
1678
|
"keywords": [
|
|
1500
1679
|
"rag",
|
|
1501
1680
|
"multimodal",
|
|
@@ -1525,7 +1704,7 @@
|
|
|
1525
1704
|
"namespace": "wunderland",
|
|
1526
1705
|
"verified": true,
|
|
1527
1706
|
"source": "curated",
|
|
1528
|
-
"verifiedAt": "2026-03-
|
|
1707
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1529
1708
|
"keywords": [
|
|
1530
1709
|
"notion",
|
|
1531
1710
|
"wiki",
|
|
@@ -1554,7 +1733,7 @@
|
|
|
1554
1733
|
"namespace": "wunderland",
|
|
1555
1734
|
"verified": true,
|
|
1556
1735
|
"source": "curated",
|
|
1557
|
-
"verifiedAt": "2026-03-
|
|
1736
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1558
1737
|
"keywords": [
|
|
1559
1738
|
"obsidian",
|
|
1560
1739
|
"markdown",
|
|
@@ -1582,7 +1761,7 @@
|
|
|
1582
1761
|
"namespace": "wunderland",
|
|
1583
1762
|
"verified": true,
|
|
1584
1763
|
"source": "curated",
|
|
1585
|
-
"verifiedAt": "2026-03-
|
|
1764
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1586
1765
|
"keywords": [
|
|
1587
1766
|
"voice",
|
|
1588
1767
|
"wake-word",
|
|
@@ -1610,7 +1789,7 @@
|
|
|
1610
1789
|
"namespace": "wunderland",
|
|
1611
1790
|
"verified": true,
|
|
1612
1791
|
"source": "curated",
|
|
1613
|
-
"verifiedAt": "2026-03-
|
|
1792
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1614
1793
|
"keywords": [
|
|
1615
1794
|
"pii",
|
|
1616
1795
|
"privacy",
|
|
@@ -1641,7 +1820,7 @@
|
|
|
1641
1820
|
"namespace": "wunderland",
|
|
1642
1821
|
"verified": true,
|
|
1643
1822
|
"source": "curated",
|
|
1644
|
-
"verifiedAt": "2026-03-
|
|
1823
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1645
1824
|
"keywords": [
|
|
1646
1825
|
"pinterest",
|
|
1647
1826
|
"social-media",
|
|
@@ -1678,7 +1857,7 @@
|
|
|
1678
1857
|
"namespace": "wunderland",
|
|
1679
1858
|
"verified": true,
|
|
1680
1859
|
"source": "curated",
|
|
1681
|
-
"verifiedAt": "2026-03-
|
|
1860
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1682
1861
|
"keywords": [
|
|
1683
1862
|
"voice",
|
|
1684
1863
|
"tts",
|
|
@@ -1705,7 +1884,7 @@
|
|
|
1705
1884
|
"namespace": "wunderland",
|
|
1706
1885
|
"verified": true,
|
|
1707
1886
|
"source": "curated",
|
|
1708
|
-
"verifiedAt": "2026-03-
|
|
1887
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1709
1888
|
"keywords": [
|
|
1710
1889
|
"voice",
|
|
1711
1890
|
"wake-word",
|
|
@@ -1736,7 +1915,7 @@
|
|
|
1736
1915
|
"namespace": "wunderland",
|
|
1737
1916
|
"verified": true,
|
|
1738
1917
|
"source": "curated",
|
|
1739
|
-
"verifiedAt": "2026-03-
|
|
1918
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1740
1919
|
"keywords": [
|
|
1741
1920
|
"productivity",
|
|
1742
1921
|
"email",
|
|
@@ -1763,7 +1942,7 @@
|
|
|
1763
1942
|
"namespace": "wunderland",
|
|
1764
1943
|
"verified": true,
|
|
1765
1944
|
"source": "curated",
|
|
1766
|
-
"verifiedAt": "2026-03-
|
|
1945
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1767
1946
|
"keywords": [
|
|
1768
1947
|
"reddit",
|
|
1769
1948
|
"social-media",
|
|
@@ -1804,7 +1983,7 @@
|
|
|
1804
1983
|
"namespace": "wunderland",
|
|
1805
1984
|
"verified": true,
|
|
1806
1985
|
"source": "curated",
|
|
1807
|
-
"verifiedAt": "2026-03-
|
|
1986
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1808
1987
|
"keywords": [
|
|
1809
1988
|
"research",
|
|
1810
1989
|
"web-search",
|
|
@@ -1830,7 +2009,7 @@
|
|
|
1830
2009
|
"namespace": "wunderland",
|
|
1831
2010
|
"verified": true,
|
|
1832
2011
|
"source": "curated",
|
|
1833
|
-
"verifiedAt": "2026-03-
|
|
2012
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1834
2013
|
"keywords": [
|
|
1835
2014
|
"seo",
|
|
1836
2015
|
"link-building",
|
|
@@ -1865,7 +2044,7 @@
|
|
|
1865
2044
|
"namespace": "wunderland",
|
|
1866
2045
|
"verified": true,
|
|
1867
2046
|
"source": "curated",
|
|
1868
|
-
"verifiedAt": "2026-03-
|
|
2047
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1869
2048
|
"keywords": [
|
|
1870
2049
|
"deploy",
|
|
1871
2050
|
"cloud",
|
|
@@ -1901,7 +2080,7 @@
|
|
|
1901
2080
|
"namespace": "wunderland",
|
|
1902
2081
|
"verified": true,
|
|
1903
2082
|
"source": "curated",
|
|
1904
|
-
"verifiedAt": "2026-03-
|
|
2083
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1905
2084
|
"keywords": [
|
|
1906
2085
|
"slack",
|
|
1907
2086
|
"messaging",
|
|
@@ -1933,7 +2112,7 @@
|
|
|
1933
2112
|
"namespace": "wunderland",
|
|
1934
2113
|
"verified": true,
|
|
1935
2114
|
"source": "curated",
|
|
1936
|
-
"verifiedAt": "2026-03-
|
|
2115
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1937
2116
|
"keywords": [
|
|
1938
2117
|
"social-media",
|
|
1939
2118
|
"automation",
|
|
@@ -1961,7 +2140,7 @@
|
|
|
1961
2140
|
"namespace": "wunderland",
|
|
1962
2141
|
"verified": true,
|
|
1963
2142
|
"source": "curated",
|
|
1964
|
-
"verifiedAt": "2026-03-
|
|
2143
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z"
|
|
1965
2144
|
},
|
|
1966
2145
|
{
|
|
1967
2146
|
"id": "com.framers.skill.spotify-player",
|
|
@@ -1974,7 +2153,7 @@
|
|
|
1974
2153
|
"namespace": "wunderland",
|
|
1975
2154
|
"verified": true,
|
|
1976
2155
|
"source": "curated",
|
|
1977
|
-
"verifiedAt": "2026-03-
|
|
2156
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
1978
2157
|
"keywords": [
|
|
1979
2158
|
"spotify",
|
|
1980
2159
|
"music",
|
|
@@ -2009,7 +2188,7 @@
|
|
|
2009
2188
|
"namespace": "wunderland",
|
|
2010
2189
|
"verified": true,
|
|
2011
2190
|
"source": "curated",
|
|
2012
|
-
"verifiedAt": "2026-03-
|
|
2191
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2013
2192
|
"keywords": [
|
|
2014
2193
|
"voice",
|
|
2015
2194
|
"stt",
|
|
@@ -2039,7 +2218,7 @@
|
|
|
2039
2218
|
"namespace": "wunderland",
|
|
2040
2219
|
"verified": true,
|
|
2041
2220
|
"source": "curated",
|
|
2042
|
-
"verifiedAt": "2026-03-
|
|
2221
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2043
2222
|
"keywords": [
|
|
2044
2223
|
"voice",
|
|
2045
2224
|
"stt",
|
|
@@ -2070,7 +2249,7 @@
|
|
|
2070
2249
|
"namespace": "wunderland",
|
|
2071
2250
|
"verified": true,
|
|
2072
2251
|
"source": "curated",
|
|
2073
|
-
"verifiedAt": "2026-03-
|
|
2252
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2074
2253
|
"keywords": [
|
|
2075
2254
|
"voice",
|
|
2076
2255
|
"tts",
|
|
@@ -2100,7 +2279,7 @@
|
|
|
2100
2279
|
"namespace": "wunderland",
|
|
2101
2280
|
"verified": true,
|
|
2102
2281
|
"source": "curated",
|
|
2103
|
-
"verifiedAt": "2026-03-
|
|
2282
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2104
2283
|
"keywords": [
|
|
2105
2284
|
"voice",
|
|
2106
2285
|
"tts",
|
|
@@ -2129,7 +2308,7 @@
|
|
|
2129
2308
|
"namespace": "wunderland",
|
|
2130
2309
|
"verified": true,
|
|
2131
2310
|
"source": "curated",
|
|
2132
|
-
"verifiedAt": "2026-03-
|
|
2311
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2133
2312
|
"keywords": [
|
|
2134
2313
|
"structured-output",
|
|
2135
2314
|
"json",
|
|
@@ -2149,7 +2328,7 @@
|
|
|
2149
2328
|
"namespace": "wunderland",
|
|
2150
2329
|
"verified": true,
|
|
2151
2330
|
"source": "curated",
|
|
2152
|
-
"verifiedAt": "2026-03-
|
|
2331
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2153
2332
|
"keywords": [
|
|
2154
2333
|
"summarization",
|
|
2155
2334
|
"text-processing",
|
|
@@ -2175,7 +2354,7 @@
|
|
|
2175
2354
|
"namespace": "wunderland",
|
|
2176
2355
|
"verified": true,
|
|
2177
2356
|
"source": "curated",
|
|
2178
|
-
"verifiedAt": "2026-03-
|
|
2357
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2179
2358
|
"keywords": [
|
|
2180
2359
|
"system",
|
|
2181
2360
|
"cli",
|
|
@@ -2201,7 +2380,7 @@
|
|
|
2201
2380
|
"namespace": "wunderland",
|
|
2202
2381
|
"verified": true,
|
|
2203
2382
|
"source": "curated",
|
|
2204
|
-
"verifiedAt": "2026-03-
|
|
2383
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2205
2384
|
"keywords": [
|
|
2206
2385
|
"threads",
|
|
2207
2386
|
"social-media",
|
|
@@ -2237,7 +2416,7 @@
|
|
|
2237
2416
|
"namespace": "wunderland",
|
|
2238
2417
|
"verified": true,
|
|
2239
2418
|
"source": "curated",
|
|
2240
|
-
"verifiedAt": "2026-03-
|
|
2419
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2241
2420
|
"keywords": [
|
|
2242
2421
|
"tiktok",
|
|
2243
2422
|
"video",
|
|
@@ -2274,7 +2453,7 @@
|
|
|
2274
2453
|
"namespace": "wunderland",
|
|
2275
2454
|
"verified": true,
|
|
2276
2455
|
"source": "curated",
|
|
2277
|
-
"verifiedAt": "2026-03-
|
|
2456
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2278
2457
|
"keywords": [
|
|
2279
2458
|
"guardrails",
|
|
2280
2459
|
"topics",
|
|
@@ -2301,7 +2480,7 @@
|
|
|
2301
2480
|
"namespace": "wunderland",
|
|
2302
2481
|
"verified": true,
|
|
2303
2482
|
"source": "curated",
|
|
2304
|
-
"verifiedAt": "2026-03-
|
|
2483
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2305
2484
|
"keywords": [
|
|
2306
2485
|
"trello",
|
|
2307
2486
|
"kanban",
|
|
@@ -2334,7 +2513,7 @@
|
|
|
2334
2513
|
"namespace": "wunderland",
|
|
2335
2514
|
"verified": true,
|
|
2336
2515
|
"source": "curated",
|
|
2337
|
-
"verifiedAt": "2026-03-
|
|
2516
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2338
2517
|
"keywords": [
|
|
2339
2518
|
"twitter",
|
|
2340
2519
|
"social-media",
|
|
@@ -2377,7 +2556,7 @@
|
|
|
2377
2556
|
"namespace": "wunderland",
|
|
2378
2557
|
"verified": true,
|
|
2379
2558
|
"source": "curated",
|
|
2380
|
-
"verifiedAt": "2026-03-
|
|
2559
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2381
2560
|
"keywords": [
|
|
2382
2561
|
"video",
|
|
2383
2562
|
"generation",
|
|
@@ -2404,7 +2583,7 @@
|
|
|
2404
2583
|
"namespace": "wunderland",
|
|
2405
2584
|
"verified": true,
|
|
2406
2585
|
"source": "curated",
|
|
2407
|
-
"verifiedAt": "2026-03-
|
|
2586
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2408
2587
|
"keywords": [
|
|
2409
2588
|
"vision",
|
|
2410
2589
|
"ocr",
|
|
@@ -2427,7 +2606,7 @@
|
|
|
2427
2606
|
"namespace": "wunderland",
|
|
2428
2607
|
"verified": true,
|
|
2429
2608
|
"source": "curated",
|
|
2430
|
-
"verifiedAt": "2026-03-
|
|
2609
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2431
2610
|
"keywords": [
|
|
2432
2611
|
"voice",
|
|
2433
2612
|
"speech",
|
|
@@ -2454,7 +2633,7 @@
|
|
|
2454
2633
|
"namespace": "wunderland",
|
|
2455
2634
|
"verified": true,
|
|
2456
2635
|
"source": "curated",
|
|
2457
|
-
"verifiedAt": "2026-03-
|
|
2636
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2458
2637
|
"keywords": [
|
|
2459
2638
|
"voice",
|
|
2460
2639
|
"telephony",
|
|
@@ -2482,7 +2661,7 @@
|
|
|
2482
2661
|
"namespace": "wunderland",
|
|
2483
2662
|
"verified": true,
|
|
2484
2663
|
"source": "curated",
|
|
2485
|
-
"verifiedAt": "2026-03-
|
|
2664
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2486
2665
|
"keywords": [
|
|
2487
2666
|
"voice",
|
|
2488
2667
|
"stt",
|
|
@@ -2508,7 +2687,7 @@
|
|
|
2508
2687
|
"namespace": "wunderland",
|
|
2509
2688
|
"verified": true,
|
|
2510
2689
|
"source": "curated",
|
|
2511
|
-
"verifiedAt": "2026-03-
|
|
2690
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2512
2691
|
"keywords": [
|
|
2513
2692
|
"weather",
|
|
2514
2693
|
"forecast",
|
|
@@ -2534,7 +2713,7 @@
|
|
|
2534
2713
|
"namespace": "wunderland",
|
|
2535
2714
|
"verified": true,
|
|
2536
2715
|
"source": "curated",
|
|
2537
|
-
"verifiedAt": "2026-03-
|
|
2716
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2538
2717
|
"keywords": [
|
|
2539
2718
|
"scraping",
|
|
2540
2719
|
"browser",
|
|
@@ -2571,7 +2750,7 @@
|
|
|
2571
2750
|
"namespace": "wunderland",
|
|
2572
2751
|
"verified": true,
|
|
2573
2752
|
"source": "curated",
|
|
2574
|
-
"verifiedAt": "2026-03-
|
|
2753
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2575
2754
|
"keywords": [
|
|
2576
2755
|
"search",
|
|
2577
2756
|
"web",
|
|
@@ -2598,7 +2777,7 @@
|
|
|
2598
2777
|
"namespace": "wunderland",
|
|
2599
2778
|
"verified": true,
|
|
2600
2779
|
"source": "curated",
|
|
2601
|
-
"verifiedAt": "2026-03-
|
|
2780
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2602
2781
|
"keywords": [
|
|
2603
2782
|
"transcription",
|
|
2604
2783
|
"whisper",
|
|
@@ -2661,7 +2840,7 @@
|
|
|
2661
2840
|
"namespace": "wunderland",
|
|
2662
2841
|
"verified": true,
|
|
2663
2842
|
"source": "curated",
|
|
2664
|
-
"verifiedAt": "2026-03-
|
|
2843
|
+
"verifiedAt": "2026-03-31T07:43:19.688Z",
|
|
2665
2844
|
"keywords": [
|
|
2666
2845
|
"youtube",
|
|
2667
2846
|
"video",
|
|
@@ -2694,8 +2873,8 @@
|
|
|
2694
2873
|
"community": []
|
|
2695
2874
|
},
|
|
2696
2875
|
"stats": {
|
|
2697
|
-
"totalSkills":
|
|
2698
|
-
"curatedCount":
|
|
2876
|
+
"totalSkills": 88,
|
|
2877
|
+
"curatedCount": 88,
|
|
2699
2878
|
"communityCount": 0
|
|
2700
2879
|
}
|
|
2701
2880
|
}
|
|
@@ -30,11 +30,28 @@ function readFrontmatter(filePath) {
|
|
|
30
30
|
|
|
31
31
|
function listSkillDirs(root) {
|
|
32
32
|
if (!fs.existsSync(root)) return [];
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
.
|
|
33
|
+
|
|
34
|
+
const skills = [];
|
|
35
|
+
|
|
36
|
+
function walk(currentDir, relativeDir = '') {
|
|
37
|
+
for (const entry of fs.readdirSync(currentDir, { withFileTypes: true })) {
|
|
38
|
+
if (!entry.isDirectory()) continue;
|
|
39
|
+
const nextRelativeDir = relativeDir ? `${relativeDir}/${entry.name}` : entry.name;
|
|
40
|
+
const nextDir = path.join(currentDir, entry.name);
|
|
41
|
+
const skillPath = path.join(nextDir, 'SKILL.md');
|
|
42
|
+
|
|
43
|
+
if (fs.existsSync(skillPath)) {
|
|
44
|
+
skills.push(nextRelativeDir);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
walk(nextDir, nextRelativeDir);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
walk(root);
|
|
53
|
+
|
|
54
|
+
return skills.sort();
|
|
38
55
|
}
|
|
39
56
|
|
|
40
57
|
function cleanObject(obj) {
|
|
@@ -67,14 +84,18 @@ function buildEntry(name, source, updatedAt) {
|
|
|
67
84
|
const metadata = fm?.metadata?.agentos && typeof fm.metadata.agentos === 'object'
|
|
68
85
|
? fm.metadata.agentos
|
|
69
86
|
: undefined;
|
|
87
|
+
const skillIdSuffix = name.replaceAll('/', '.');
|
|
70
88
|
|
|
71
89
|
return cleanObject({
|
|
72
|
-
id:
|
|
90
|
+
id:
|
|
91
|
+
source === 'curated'
|
|
92
|
+
? `com.framers.skill.${skillIdSuffix}`
|
|
93
|
+
: `com.community.skill.${skillIdSuffix}`,
|
|
73
94
|
name,
|
|
74
95
|
displayName:
|
|
75
96
|
typeof fm.name === 'string' && fm.name.trim().length > 0
|
|
76
97
|
? fm.name
|
|
77
|
-
: slugToDisplayName(name),
|
|
98
|
+
: slugToDisplayName(name.replaceAll('/', '-')),
|
|
78
99
|
version: typeof fm.version === 'string' && fm.version ? fm.version : '1.0.0',
|
|
79
100
|
path: `registry/${source}/${name}`,
|
|
80
101
|
description: typeof fm.description === 'string' ? fm.description : '',
|
|
@@ -25,6 +25,7 @@ const VALID_CATEGORIES = new Set([
|
|
|
25
25
|
'creative',
|
|
26
26
|
'developer-tools',
|
|
27
27
|
'devops',
|
|
28
|
+
'game',
|
|
28
29
|
'information',
|
|
29
30
|
'infrastructure',
|
|
30
31
|
'marketing',
|
|
@@ -229,21 +230,27 @@ function discoverSkills(rootDir) {
|
|
|
229
230
|
const skills = [];
|
|
230
231
|
const tiers = ['curated', 'community'];
|
|
231
232
|
|
|
232
|
-
|
|
233
|
-
const
|
|
234
|
-
|
|
233
|
+
function walk(dir) {
|
|
234
|
+
for (const entry of readdirSync(dir)) {
|
|
235
|
+
const entryPath = join(dir, entry);
|
|
236
|
+
if (!statSync(entryPath).isDirectory()) continue;
|
|
235
237
|
|
|
236
|
-
|
|
237
|
-
const skillDir = join(tierDir, entry);
|
|
238
|
-
if (!statSync(skillDir).isDirectory()) continue;
|
|
239
|
-
|
|
240
|
-
const skillFile = join(skillDir, 'SKILL.md');
|
|
238
|
+
const skillFile = join(entryPath, 'SKILL.md');
|
|
241
239
|
if (existsSync(skillFile)) {
|
|
242
240
|
skills.push(skillFile);
|
|
241
|
+
continue;
|
|
243
242
|
}
|
|
243
|
+
|
|
244
|
+
walk(entryPath);
|
|
244
245
|
}
|
|
245
246
|
}
|
|
246
247
|
|
|
248
|
+
for (const tier of tiers) {
|
|
249
|
+
const tierDir = join(rootDir, 'registry', tier);
|
|
250
|
+
if (!existsSync(tierDir)) continue;
|
|
251
|
+
walk(tierDir);
|
|
252
|
+
}
|
|
253
|
+
|
|
247
254
|
return skills;
|
|
248
255
|
}
|
|
249
256
|
|
package/types.d.ts
CHANGED