gooseworks 0.2.2 → 0.2.4
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/.claude-plugin/plugin.json +4 -2
- package/README.md +31 -4
- package/dist/agents/claude.d.ts.map +1 -1
- package/dist/agents/claude.js +4 -3
- package/dist/agents/claude.js.map +1 -1
- package/dist/agents/codex.d.ts.map +1 -1
- package/dist/agents/codex.js +4 -3
- package/dist/agents/codex.js.map +1 -1
- package/dist/commands/install.d.ts.map +1 -1
- package/dist/commands/install.js +29 -1
- package/dist/commands/install.js.map +1 -1
- package/dist/index.js +0 -0
- package/dist/skills/installer.d.ts +7 -0
- package/dist/skills/installer.d.ts.map +1 -1
- package/dist/skills/installer.js +114 -2
- package/dist/skills/installer.js.map +1 -1
- package/dist/skills/names.d.ts +2 -0
- package/dist/skills/names.d.ts.map +1 -0
- package/dist/skills/names.js +7 -0
- package/dist/skills/names.js.map +1 -0
- package/package.json +1 -1
- package/dist/skills/fetcher.d.ts +0 -18
- package/dist/skills/fetcher.d.ts.map +0 -1
- package/dist/skills/fetcher.js +0 -118
- package/dist/skills/fetcher.js.map +0 -1
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
"description": "100+ data tools for scraping, research, lead generation, and enrichment. Search Twitter/X, Reddit, LinkedIn, find emails, enrich companies, and more — all from your coding agent.",
|
|
4
4
|
"author": {
|
|
5
5
|
"name": "GooseWorks",
|
|
6
|
-
"email": "
|
|
7
|
-
}
|
|
6
|
+
"email": "goose@gooseworks.ai"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "https://gooseworks.ai",
|
|
9
|
+
"keywords": ["data", "scraping", "leads", "research", "gtm", "enrichment", "linkedin", "twitter", "reddit", "email"]
|
|
8
10
|
}
|
package/README.md
CHANGED
|
@@ -9,6 +9,7 @@ Pick your agent:
|
|
|
9
9
|
```bash
|
|
10
10
|
# Claude Code
|
|
11
11
|
npx gooseworks install --claude
|
|
12
|
+
npx gooseworks install --claude --with goose-graphics
|
|
12
13
|
|
|
13
14
|
# Cursor
|
|
14
15
|
npx gooseworks install --cursor
|
|
@@ -25,6 +26,8 @@ This does three things:
|
|
|
25
26
|
2. Installs the GooseWorks skill into your coding agent
|
|
26
27
|
3. You're ready — ask your agent to "scrape reddit", "find leads", "research competitors"
|
|
27
28
|
|
|
29
|
+
Use `--with <skill-slug>` to install standalone GooseWorks skills alongside the main GooseWorks skill. For example, `--with goose-graphics` installs `/goose-graphics` locally so your agent can run it directly without doing a catalog lookup through `/gooseworks`.
|
|
30
|
+
|
|
28
31
|
### Other install methods
|
|
29
32
|
|
|
30
33
|
```bash
|
|
@@ -33,6 +36,12 @@ npx skills add gooseworks-ai/gooseworks
|
|
|
33
36
|
|
|
34
37
|
# Via Claude Code plugins
|
|
35
38
|
/plugin install gooseworks
|
|
39
|
+
|
|
40
|
+
# Via OpenClaw ClawHub
|
|
41
|
+
clawhub skill install gooseworks
|
|
42
|
+
|
|
43
|
+
# Via Codex (OpenAI) — available once merged into openai/skills
|
|
44
|
+
codex skills install gooseworks
|
|
36
45
|
```
|
|
37
46
|
|
|
38
47
|
## Commands
|
|
@@ -46,12 +55,17 @@ npx gooseworks install --claude # Configure for Claude Code
|
|
|
46
55
|
npx gooseworks install --cursor # Configure for Cursor
|
|
47
56
|
npx gooseworks install --codex # Configure for Codex
|
|
48
57
|
npx gooseworks install --all # Configure all detected agents
|
|
58
|
+
npx gooseworks install --claude --with goose-graphics
|
|
59
|
+
npx gooseworks install --claude --with goose-graphics --with aeo
|
|
49
60
|
```
|
|
50
61
|
|
|
51
62
|
**What it does:**
|
|
52
63
|
- Runs `login` if you don't have credentials yet
|
|
53
64
|
- Writes the GooseWorks skill to `~/.agents/skills/gooseworks/SKILL.md`
|
|
54
|
-
-
|
|
65
|
+
- Downloads any `--with` standalone skills from `gooseworks-ai/goose-skills` into `~/.agents/skills/<slug>/`
|
|
66
|
+
- Creates symlinks in `~/.claude/skills/` (Claude) or `~/.codex/skills/` (Codex), or writes MCP config (Cursor)
|
|
67
|
+
|
|
68
|
+
`--with` is repeatable. Unknown slugs are reported clearly and do not block the main GooseWorks skill install.
|
|
55
69
|
|
|
56
70
|
### `login`
|
|
57
71
|
|
|
@@ -118,6 +132,8 @@ npx gooseworks update
|
|
|
118
132
|
4. **Runs it** — downloads and executes the skill's Python scripts, which call GooseWorks APIs
|
|
119
133
|
5. **You get results** — structured data returned directly in your coding agent
|
|
120
134
|
|
|
135
|
+
Standalone skills installed with `--with` skip the catalog search step. After `npx gooseworks install --claude --with goose-graphics`, you can invoke `/goose-graphics ...` directly from Claude Code.
|
|
136
|
+
|
|
121
137
|
## What's Included
|
|
122
138
|
|
|
123
139
|
100+ skills across these categories:
|
|
@@ -146,15 +162,26 @@ npx gooseworks update
|
|
|
146
162
|
|
|
147
163
|
```
|
|
148
164
|
~/.agents/skills/
|
|
149
|
-
|
|
150
|
-
|
|
165
|
+
├── gooseworks/
|
|
166
|
+
│ └── SKILL.md # GooseWorks skill — teaches your agent to use 100+ data tools
|
|
167
|
+
└── goose-graphics/
|
|
168
|
+
└── SKILL.md # Optional standalone skill installed with --with
|
|
151
169
|
```
|
|
152
170
|
|
|
153
171
|
### Claude Code Symlinks
|
|
154
172
|
|
|
155
173
|
```
|
|
156
174
|
~/.claude/skills/
|
|
157
|
-
|
|
175
|
+
├── gooseworks → ~/.agents/skills/gooseworks
|
|
176
|
+
└── goose-graphics → ~/.agents/skills/goose-graphics
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### Codex Symlinks
|
|
180
|
+
|
|
181
|
+
```
|
|
182
|
+
~/.codex/skills/
|
|
183
|
+
├── gooseworks → ~/.agents/skills/gooseworks
|
|
184
|
+
└── goose-graphics → ~/.agents/skills/goose-graphics
|
|
158
185
|
```
|
|
159
186
|
|
|
160
187
|
## Pricing
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude.d.ts","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":"AAQA,wBAAgB,kBAAkB,IAAI,MAAM,CAE3C;AAED,wBAAgB,eAAe,IAAI,MAAM,CA+CxC;AAED,wBAAgB,YAAY,IAAI,IAAI,CAgBnC"}
|
package/dist/agents/claude.js
CHANGED
|
@@ -40,6 +40,7 @@ const fs = __importStar(require("fs"));
|
|
|
40
40
|
const path = __importStar(require("path"));
|
|
41
41
|
const os = __importStar(require("os"));
|
|
42
42
|
const installer_1 = require("../skills/installer");
|
|
43
|
+
const names_1 = require("../skills/names");
|
|
43
44
|
const CLAUDE_SKILLS_DIR = path.join(os.homedir(), '.claude', 'skills');
|
|
44
45
|
function getClaudeSkillsDir() {
|
|
45
46
|
return CLAUDE_SKILLS_DIR;
|
|
@@ -54,7 +55,7 @@ function configureClaude() {
|
|
|
54
55
|
try {
|
|
55
56
|
const existing = fs.readdirSync(CLAUDE_SKILLS_DIR);
|
|
56
57
|
for (const entry of existing) {
|
|
57
|
-
if (
|
|
58
|
+
if (!(0, names_1.isManagedGooseworksSkill)(entry))
|
|
58
59
|
continue;
|
|
59
60
|
const target = path.join(CLAUDE_SKILLS_DIR, entry);
|
|
60
61
|
try {
|
|
@@ -73,7 +74,7 @@ function configureClaude() {
|
|
|
73
74
|
}
|
|
74
75
|
// Symlink only what's currently in ~/.agents/skills/
|
|
75
76
|
const skillDirs = fs.readdirSync(skillsBase)
|
|
76
|
-
.filter(
|
|
77
|
+
.filter(names_1.isManagedGooseworksSkill);
|
|
77
78
|
let linked = 0;
|
|
78
79
|
for (const skillDir of skillDirs) {
|
|
79
80
|
const source = path.join(skillsBase, skillDir);
|
|
@@ -95,7 +96,7 @@ function removeClaude() {
|
|
|
95
96
|
return;
|
|
96
97
|
const entries = fs.readdirSync(CLAUDE_SKILLS_DIR);
|
|
97
98
|
for (const entry of entries) {
|
|
98
|
-
if (
|
|
99
|
+
if (!(0, names_1.isManagedGooseworksSkill)(entry))
|
|
99
100
|
continue;
|
|
100
101
|
const target = path.join(CLAUDE_SKILLS_DIR, entry);
|
|
101
102
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"claude.js","sourceRoot":"","sources":["../../src/agents/claude.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,gDAEC;AAED,0CA+CC;AAED,oCAgBC;AA7ED,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,mDAAwD;AACxD,2CAA2D;AAE3D,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;AAEvE,SAAgB,kBAAkB;IAChC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAgB,eAAe;IAC7B,MAAM,UAAU,GAAG,IAAA,6BAAiB,GAAE,CAAC;IACvC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,CAAC;IACX,CAAC;IAED,EAAE,CAAC,SAAS,CAAC,iBAAiB,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAErD,+CAA+C;IAC/C,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;QACnD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC7B,IAAI,CAAC,IAAA,gCAAwB,EAAC,KAAK,CAAC;gBAAE,SAAS;YAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;YACnD,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;oBAC1B,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;gBACxB,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IAED,qDAAqD;IACrD,MAAM,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,UAAU,CAAC;SACzC,MAAM,CAAC,gCAAwB,CAAC,CAAC;IAEpC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAEtD,IAAI,CAAC;YACH,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACP,+CAA+C;YAC/C,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACpD,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,EAAE,CAAC;IACX,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAgB,YAAY;IAC1B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,iBAAiB,CAAC;QAAE,OAAO;IAE9C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAClD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,IAAA,gCAAwB,EAAC,KAAK,CAAC;YAAE,SAAS;QAC/C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,KAAK,CAAC,CAAC;QACnD,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAClC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;gBAC1B,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"AAQA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,cAAc,IAAI,MAAM,CA+CvC;AAED,wBAAgB,WAAW,IAAI,IAAI,CAgBlC"}
|
package/dist/agents/codex.js
CHANGED
|
@@ -40,6 +40,7 @@ const fs = __importStar(require("fs"));
|
|
|
40
40
|
const path = __importStar(require("path"));
|
|
41
41
|
const os = __importStar(require("os"));
|
|
42
42
|
const installer_1 = require("../skills/installer");
|
|
43
|
+
const names_1 = require("../skills/names");
|
|
43
44
|
const CODEX_SKILLS_DIR = path.join(os.homedir(), '.codex', 'skills');
|
|
44
45
|
function getCodexSkillsDir() {
|
|
45
46
|
return CODEX_SKILLS_DIR;
|
|
@@ -54,7 +55,7 @@ function configureCodex() {
|
|
|
54
55
|
try {
|
|
55
56
|
const existing = fs.readdirSync(CODEX_SKILLS_DIR);
|
|
56
57
|
for (const entry of existing) {
|
|
57
|
-
if (
|
|
58
|
+
if (!(0, names_1.isManagedGooseworksSkill)(entry))
|
|
58
59
|
continue;
|
|
59
60
|
const target = path.join(CODEX_SKILLS_DIR, entry);
|
|
60
61
|
try {
|
|
@@ -73,7 +74,7 @@ function configureCodex() {
|
|
|
73
74
|
}
|
|
74
75
|
// Symlink only what's currently in ~/.agents/skills/
|
|
75
76
|
const skillDirs = fs.readdirSync(skillsBase)
|
|
76
|
-
.filter(
|
|
77
|
+
.filter(names_1.isManagedGooseworksSkill);
|
|
77
78
|
let linked = 0;
|
|
78
79
|
for (const skillDir of skillDirs) {
|
|
79
80
|
const source = path.join(skillsBase, skillDir);
|
|
@@ -95,7 +96,7 @@ function removeCodex() {
|
|
|
95
96
|
return;
|
|
96
97
|
const entries = fs.readdirSync(CODEX_SKILLS_DIR);
|
|
97
98
|
for (const entry of entries) {
|
|
98
|
-
if (
|
|
99
|
+
if (!(0, names_1.isManagedGooseworksSkill)(entry))
|
|
99
100
|
continue;
|
|
100
101
|
const target = path.join(CODEX_SKILLS_DIR, entry);
|
|
101
102
|
try {
|
package/dist/agents/codex.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"codex.js","sourceRoot":"","sources":["../../src/agents/codex.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,oBAAoB,IAAI,OAAO,CA2G9C;AAED,eAAO,MAAM,cAAc,SAAyB,CAAC"}
|
package/dist/commands/install.js
CHANGED
|
@@ -49,12 +49,17 @@ const config_1 = require("../config");
|
|
|
49
49
|
const version_1 = require("../version");
|
|
50
50
|
function createInstallCommand() {
|
|
51
51
|
return new commander_1.Command('install')
|
|
52
|
-
.description(
|
|
52
|
+
.description(`Install GooseWorks data tools into your coding agent
|
|
53
|
+
|
|
54
|
+
Examples:
|
|
55
|
+
$ gooseworks install --claude --with goose-graphics
|
|
56
|
+
$ gooseworks install --claude --with goose-graphics --with goose-aeo`)
|
|
53
57
|
.option('--claude', 'Configure for Claude Code')
|
|
54
58
|
.option('--codex', 'Configure for Codex')
|
|
55
59
|
.option('--cursor', 'Configure for Cursor')
|
|
56
60
|
.option('--all', 'Configure for all detected agents (implies --mcp)')
|
|
57
61
|
.option('--mcp', 'Also register the GooseWorks MCP server')
|
|
62
|
+
.option('--with <skill-slug>', 'Also install a standalone GooseWorks skill (repeatable)', collectSkillSlug, [])
|
|
58
63
|
.option('--api-base <url>', 'API base URL', config_1.API_BASE)
|
|
59
64
|
.action(async (opts) => {
|
|
60
65
|
logger.banner((0, version_1.getVersion)());
|
|
@@ -75,6 +80,26 @@ function createInstallCommand() {
|
|
|
75
80
|
const masterContent = (0, master_skill_1.getMasterSkillContent)();
|
|
76
81
|
(0, installer_1.installMasterSkill)(masterContent);
|
|
77
82
|
logger.success('Installed GooseWorks skill to ~/.agents/skills/gooseworks/');
|
|
83
|
+
for (const slug of opts.with || []) {
|
|
84
|
+
try {
|
|
85
|
+
logger.info(`Installing standalone skill ${slug}...`);
|
|
86
|
+
let lastReported = 0;
|
|
87
|
+
await (0, installer_1.installStandaloneSkill)(slug, {
|
|
88
|
+
onProgress: ({ downloaded, total }) => {
|
|
89
|
+
const step = Math.max(1, Math.min(5, Math.ceil(total / 10)));
|
|
90
|
+
if (downloaded === total || downloaded - lastReported >= step) {
|
|
91
|
+
logger.info(` Downloaded ${downloaded}/${total} files for ${slug}`);
|
|
92
|
+
lastReported = downloaded;
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
});
|
|
96
|
+
logger.success(`Installed standalone skill ${slug} to ~/.agents/skills/${slug}/`);
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
100
|
+
logger.error(`Could not install standalone skill ${slug}: ${message}`);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
78
103
|
// Step 3: Configure agents
|
|
79
104
|
logger.step(3, 3, 'Configuring agents...');
|
|
80
105
|
for (const agent of targetAgents) {
|
|
@@ -145,4 +170,7 @@ function resolveTargetAgents(opts) {
|
|
|
145
170
|
targets.push('cursor');
|
|
146
171
|
return targets;
|
|
147
172
|
}
|
|
173
|
+
function collectSkillSlug(value, previous) {
|
|
174
|
+
return [...previous, value];
|
|
175
|
+
}
|
|
148
176
|
//# sourceMappingURL=install.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
File without changes
|
|
@@ -1,5 +1,12 @@
|
|
|
1
|
+
export interface InstallStandaloneSkillOptions {
|
|
2
|
+
onProgress?: (progress: {
|
|
3
|
+
downloaded: number;
|
|
4
|
+
total: number;
|
|
5
|
+
}) => void;
|
|
6
|
+
}
|
|
1
7
|
export declare function getSkillsBasePath(): string;
|
|
2
8
|
export declare function installMasterSkill(masterSkillMd: string): void;
|
|
9
|
+
export declare function installStandaloneSkill(slug: string, options?: InstallStandaloneSkillOptions): Promise<void>;
|
|
3
10
|
export declare function getInstalledSkills(): string[];
|
|
4
11
|
export declare function removeAllSkills(): void;
|
|
5
12
|
//# sourceMappingURL=installer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,6BAA6B;IAC5C,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;CACxE;AAED,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,IAAI,CAQ9D;AAED,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC,IAAI,CAAC,CAoCf;AA0CD,wBAAgB,kBAAkB,IAAI,MAAM,EAAE,CAS7C;AAED,wBAAgB,eAAe,IAAI,IAAI,CAQtC"}
|
package/dist/skills/installer.js
CHANGED
|
@@ -35,12 +35,17 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.getSkillsBasePath = getSkillsBasePath;
|
|
37
37
|
exports.installMasterSkill = installMasterSkill;
|
|
38
|
+
exports.installStandaloneSkill = installStandaloneSkill;
|
|
38
39
|
exports.getInstalledSkills = getInstalledSkills;
|
|
39
40
|
exports.removeAllSkills = removeAllSkills;
|
|
40
41
|
const fs = __importStar(require("fs"));
|
|
41
42
|
const path = __importStar(require("path"));
|
|
42
43
|
const os = __importStar(require("os"));
|
|
44
|
+
const names_1 = require("./names");
|
|
43
45
|
const SKILLS_BASE = path.join(os.homedir(), '.agents', 'skills');
|
|
46
|
+
const GOOSE_SKILLS_TREE_URL = 'https://api.github.com/repos/gooseworks-ai/goose-skills/git/trees/main?recursive=1';
|
|
47
|
+
const GOOSE_SKILLS_RAW_BASE = 'https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main';
|
|
48
|
+
const DOWNLOAD_CONCURRENCY = 6;
|
|
44
49
|
function getSkillsBasePath() {
|
|
45
50
|
return SKILLS_BASE;
|
|
46
51
|
}
|
|
@@ -49,11 +54,77 @@ function installMasterSkill(masterSkillMd) {
|
|
|
49
54
|
fs.mkdirSync(masterDir, { recursive: true });
|
|
50
55
|
fs.writeFileSync(path.join(masterDir, 'SKILL.md'), masterSkillMd, 'utf-8');
|
|
51
56
|
}
|
|
57
|
+
async function installStandaloneSkill(slug, options = {}) {
|
|
58
|
+
if (!/^[a-z0-9][a-z0-9-]*$/.test(slug)) {
|
|
59
|
+
throw new Error(`invalid skill slug '${slug}'. Use a slug like goose-graphics.`);
|
|
60
|
+
}
|
|
61
|
+
const tree = await fetchGooseSkillsTree();
|
|
62
|
+
const { prefix, files } = findSkillFiles(tree, slug);
|
|
63
|
+
if (files.length === 0) {
|
|
64
|
+
const available = getAvailableSkillSlugs(tree);
|
|
65
|
+
const suffix = available.length > 0 ? ` Available: ${available.join(', ')}` : '';
|
|
66
|
+
throw new Error(`skill '${slug}' not found.${suffix}`);
|
|
67
|
+
}
|
|
68
|
+
const targetDir = path.join(SKILLS_BASE, slug);
|
|
69
|
+
const stagingDir = path.join(SKILLS_BASE, `.${slug}.installing`);
|
|
70
|
+
fs.rmSync(stagingDir, { recursive: true, force: true });
|
|
71
|
+
let completed = 0;
|
|
72
|
+
try {
|
|
73
|
+
await withConcurrency(files, DOWNLOAD_CONCURRENCY, async (filePath) => {
|
|
74
|
+
const relativePath = filePath.slice(prefix.length);
|
|
75
|
+
const targetPath = path.join(stagingDir, relativePath);
|
|
76
|
+
const buffer = await fetchRawSkillFile(filePath);
|
|
77
|
+
fs.mkdirSync(path.dirname(targetPath), { recursive: true });
|
|
78
|
+
fs.writeFileSync(targetPath, buffer);
|
|
79
|
+
completed++;
|
|
80
|
+
options.onProgress?.({ downloaded: completed, total: files.length });
|
|
81
|
+
});
|
|
82
|
+
fs.rmSync(targetDir, { recursive: true, force: true });
|
|
83
|
+
fs.renameSync(stagingDir, targetDir);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
fs.rmSync(stagingDir, { recursive: true, force: true });
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
async function withConcurrency(items, concurrency, worker) {
|
|
91
|
+
let cursor = 0;
|
|
92
|
+
let failure;
|
|
93
|
+
const runners = Array.from({ length: Math.max(1, Math.min(concurrency, items.length)) }, async () => {
|
|
94
|
+
while (cursor < items.length && failure === undefined) {
|
|
95
|
+
const idx = cursor++;
|
|
96
|
+
try {
|
|
97
|
+
await worker(items[idx]);
|
|
98
|
+
}
|
|
99
|
+
catch (err) {
|
|
100
|
+
if (failure === undefined)
|
|
101
|
+
failure = err;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
await Promise.all(runners);
|
|
106
|
+
if (failure !== undefined)
|
|
107
|
+
throw failure;
|
|
108
|
+
}
|
|
109
|
+
function findSkillFiles(tree, slug) {
|
|
110
|
+
const skillMarker = `${slug}/SKILL.md`;
|
|
111
|
+
const skillEntry = tree.find((entry) => entry.type === 'blob' && (entry.path === skillMarker || entry.path.endsWith(`/${skillMarker}`)));
|
|
112
|
+
if (skillEntry) {
|
|
113
|
+
const prefix = skillEntry.path.slice(0, -'SKILL.md'.length);
|
|
114
|
+
return {
|
|
115
|
+
prefix,
|
|
116
|
+
files: tree
|
|
117
|
+
.filter((entry) => entry.type === 'blob' && entry.path.startsWith(prefix))
|
|
118
|
+
.map((entry) => entry.path),
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return { prefix: `${slug}/`, files: [] };
|
|
122
|
+
}
|
|
52
123
|
function getInstalledSkills() {
|
|
53
124
|
if (!fs.existsSync(SKILLS_BASE))
|
|
54
125
|
return [];
|
|
55
126
|
return fs.readdirSync(SKILLS_BASE)
|
|
56
|
-
.filter(
|
|
127
|
+
.filter(names_1.isManagedGooseworksSkill)
|
|
57
128
|
.filter((entry) => {
|
|
58
129
|
const skillMd = path.join(SKILLS_BASE, entry, 'SKILL.md');
|
|
59
130
|
return fs.existsSync(skillMd);
|
|
@@ -64,9 +135,50 @@ function removeAllSkills() {
|
|
|
64
135
|
return;
|
|
65
136
|
const entries = fs.readdirSync(SKILLS_BASE);
|
|
66
137
|
for (const entry of entries) {
|
|
67
|
-
if (
|
|
138
|
+
if (!(0, names_1.isManagedGooseworksSkill)(entry))
|
|
68
139
|
continue;
|
|
69
140
|
fs.rmSync(path.join(SKILLS_BASE, entry), { recursive: true, force: true });
|
|
70
141
|
}
|
|
71
142
|
}
|
|
143
|
+
async function fetchGooseSkillsTree() {
|
|
144
|
+
const response = await fetch(GOOSE_SKILLS_TREE_URL);
|
|
145
|
+
if (!response.ok) {
|
|
146
|
+
if (response.status === 403 && response.headers.get('x-ratelimit-remaining') === '0') {
|
|
147
|
+
throw new Error(`GitHub API rate-limited this IP.${formatRateLimitWait(response.headers.get('x-ratelimit-reset'))} Set GITHUB_TOKEN to raise the limit.`);
|
|
148
|
+
}
|
|
149
|
+
throw new Error(`could not list standalone skills from goose-skills (${response.status})`);
|
|
150
|
+
}
|
|
151
|
+
const data = await response.json();
|
|
152
|
+
return data.tree || [];
|
|
153
|
+
}
|
|
154
|
+
function formatRateLimitWait(resetHeader) {
|
|
155
|
+
if (!resetHeader)
|
|
156
|
+
return '';
|
|
157
|
+
const resetMs = Number(resetHeader) * 1000;
|
|
158
|
+
if (!Number.isFinite(resetMs))
|
|
159
|
+
return '';
|
|
160
|
+
const minutes = Math.max(1, Math.ceil((resetMs - Date.now()) / 60_000));
|
|
161
|
+
return ` Try again in about ${minutes} minute${minutes === 1 ? '' : 's'}.`;
|
|
162
|
+
}
|
|
163
|
+
async function fetchRawSkillFile(filePath) {
|
|
164
|
+
const url = `${GOOSE_SKILLS_RAW_BASE}/${filePath.split('/').map(encodeURIComponent).join('/')}`;
|
|
165
|
+
const response = await fetch(url);
|
|
166
|
+
if (!response.ok) {
|
|
167
|
+
throw new Error(`could not download ${filePath} from goose-skills (${response.status})`);
|
|
168
|
+
}
|
|
169
|
+
return Buffer.from(await response.arrayBuffer());
|
|
170
|
+
}
|
|
171
|
+
function getAvailableSkillSlugs(tree) {
|
|
172
|
+
const slugs = new Set();
|
|
173
|
+
for (const entry of tree) {
|
|
174
|
+
if (entry.type !== 'blob' || !entry.path.endsWith('/SKILL.md'))
|
|
175
|
+
continue;
|
|
176
|
+
const parts = entry.path.split('/');
|
|
177
|
+
const slug = parts[parts.length - 2];
|
|
178
|
+
if (slug) {
|
|
179
|
+
slugs.add(slug);
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
return [...slugs].sort();
|
|
183
|
+
}
|
|
72
184
|
//# sourceMappingURL=installer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skills/installer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.d.ts","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":"AAAA,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE9D"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isManagedGooseworksSkill = isManagedGooseworksSkill;
|
|
4
|
+
function isManagedGooseworksSkill(name) {
|
|
5
|
+
return name === 'gooseworks' || name.startsWith('gooseworks-') || name.startsWith('goose-');
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","sourceRoot":"","sources":["../../src/skills/names.ts"],"names":[],"mappings":";;AAAA,4DAEC;AAFD,SAAgB,wBAAwB,CAAC,IAAY;IACnD,OAAO,IAAI,KAAK,YAAY,IAAI,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AAC9F,CAAC"}
|
package/package.json
CHANGED
package/dist/skills/fetcher.d.ts
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export interface SkillCatalogEntry {
|
|
2
|
-
slug: string;
|
|
3
|
-
name: string;
|
|
4
|
-
description: string;
|
|
5
|
-
category: string;
|
|
6
|
-
skill_md: string;
|
|
7
|
-
scripts?: Array<{
|
|
8
|
-
filename: string;
|
|
9
|
-
content: string;
|
|
10
|
-
}>;
|
|
11
|
-
}
|
|
12
|
-
export interface SkillCatalog {
|
|
13
|
-
skills: SkillCatalogEntry[];
|
|
14
|
-
master_skill_md: string;
|
|
15
|
-
}
|
|
16
|
-
export declare function fetchSkillCatalog(apiBase: string, apiKey: string): Promise<SkillCatalog>;
|
|
17
|
-
export declare function fetchSkillCatalogFromGithub(): Promise<SkillCatalog>;
|
|
18
|
-
//# sourceMappingURL=fetcher.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../src/skills/fetcher.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,KAAK,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;CACzB;AAuBD,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAa9F;AAeD,wBAAsB,2BAA2B,IAAI,OAAO,CAAC,YAAY,CAAC,CAkDzE"}
|
package/dist/skills/fetcher.js
DELETED
|
@@ -1,118 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.fetchSkillCatalog = fetchSkillCatalog;
|
|
37
|
-
exports.fetchSkillCatalogFromGithub = fetchSkillCatalogFromGithub;
|
|
38
|
-
const https = __importStar(require("https"));
|
|
39
|
-
const http = __importStar(require("http"));
|
|
40
|
-
function httpGet(url, headers) {
|
|
41
|
-
return new Promise((resolve, reject) => {
|
|
42
|
-
const client = url.startsWith('https') ? https : http;
|
|
43
|
-
const req = client.get(url, { headers }, (res) => {
|
|
44
|
-
if (res.statusCode && res.statusCode >= 300 && res.statusCode < 400 && res.headers.location) {
|
|
45
|
-
httpGet(res.headers.location, headers).then(resolve, reject);
|
|
46
|
-
return;
|
|
47
|
-
}
|
|
48
|
-
if (res.statusCode && res.statusCode >= 400) {
|
|
49
|
-
reject(new Error(`HTTP ${res.statusCode} from ${url}`));
|
|
50
|
-
return;
|
|
51
|
-
}
|
|
52
|
-
const chunks = [];
|
|
53
|
-
res.on('data', (chunk) => chunks.push(chunk));
|
|
54
|
-
res.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));
|
|
55
|
-
res.on('error', reject);
|
|
56
|
-
});
|
|
57
|
-
req.on('error', reject);
|
|
58
|
-
});
|
|
59
|
-
}
|
|
60
|
-
async function fetchSkillCatalog(apiBase, apiKey) {
|
|
61
|
-
const url = `${apiBase}/v1/skills/catalog`;
|
|
62
|
-
const body = await httpGet(url, {
|
|
63
|
-
'Authorization': `Bearer ${apiKey}`,
|
|
64
|
-
'Accept': 'application/json',
|
|
65
|
-
});
|
|
66
|
-
const response = JSON.parse(body);
|
|
67
|
-
if (response.status === 'error') {
|
|
68
|
-
throw new Error(response.message || 'Failed to fetch skill catalog');
|
|
69
|
-
}
|
|
70
|
-
return response.data;
|
|
71
|
-
}
|
|
72
|
-
const GITHUB_RAW_BASE = 'https://raw.githubusercontent.com/gooseworks-ai/goose-skills/main';
|
|
73
|
-
async function fetchSkillCatalogFromGithub() {
|
|
74
|
-
const indexUrl = `${GITHUB_RAW_BASE}/skills-index.json`;
|
|
75
|
-
const indexBody = await httpGet(indexUrl, { 'Accept': 'application/json' });
|
|
76
|
-
const index = JSON.parse(indexBody);
|
|
77
|
-
const skills = [];
|
|
78
|
-
for (const entry of index.skills) {
|
|
79
|
-
try {
|
|
80
|
-
const skillMdUrl = `${GITHUB_RAW_BASE}/${entry.path}/SKILL.md`;
|
|
81
|
-
const skillMd = await httpGet(skillMdUrl, {});
|
|
82
|
-
const scripts = [];
|
|
83
|
-
if (entry.scripts) {
|
|
84
|
-
for (const scriptPath of entry.scripts) {
|
|
85
|
-
try {
|
|
86
|
-
const scriptUrl = `${GITHUB_RAW_BASE}/${entry.path}/scripts/${scriptPath}`;
|
|
87
|
-
const content = await httpGet(scriptUrl, {});
|
|
88
|
-
scripts.push({ filename: scriptPath, content });
|
|
89
|
-
}
|
|
90
|
-
catch {
|
|
91
|
-
// Skip scripts that fail to download
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
skills.push({
|
|
96
|
-
slug: entry.slug,
|
|
97
|
-
name: entry.name,
|
|
98
|
-
description: entry.description,
|
|
99
|
-
category: entry.category,
|
|
100
|
-
skill_md: skillMd,
|
|
101
|
-
scripts: scripts.length > 0 ? scripts : undefined,
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
catch {
|
|
105
|
-
// Skip skills that fail to download
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
// Fetch master skill
|
|
109
|
-
let masterSkillMd = '';
|
|
110
|
-
try {
|
|
111
|
-
masterSkillMd = await httpGet(`${GITHUB_RAW_BASE}/skills/gooseworks-master/SKILL.md`, {});
|
|
112
|
-
}
|
|
113
|
-
catch {
|
|
114
|
-
// Will use embedded fallback
|
|
115
|
-
}
|
|
116
|
-
return { skills, master_skill_md: masterSkillMd };
|
|
117
|
-
}
|
|
118
|
-
//# sourceMappingURL=fetcher.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../src/skills/fetcher.ts"],"names":[],"mappings":"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"}
|