@fprad0/skill-master-mcp 0.0.2
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/CHANGELOG.md +22 -0
- package/README.md +168 -0
- package/VERSION.md +9 -0
- package/bin/skill-master-configure-private-registry.mjs +3 -0
- package/bin/skill-master.mjs +3 -0
- package/dist/catalog.d.ts +11 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +202 -0
- package/dist/catalog.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +284 -0
- package/dist/index.js.map +1 -0
- package/dist/recommender.d.ts +6 -0
- package/dist/recommender.d.ts.map +1 -0
- package/dist/recommender.js +102 -0
- package/dist/recommender.js.map +1 -0
- package/dist/skill-network.d.ts +67 -0
- package/dist/skill-network.d.ts.map +1 -0
- package/dist/skill-network.js +226 -0
- package/dist/skill-network.js.map +1 -0
- package/dist/types.d.ts +89 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/update.d.ts +45 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +288 -0
- package/dist/update.js.map +1 -0
- package/docs/operations/GUIA_NPM_PRIVADO.md +250 -0
- package/examples/client-configs/claude-code.commands.md +17 -0
- package/examples/client-configs/claude-code.project.mcp.json +18 -0
- package/examples/client-configs/claude-desktop.macos.json +18 -0
- package/examples/client-configs/claude-desktop.windows.json +20 -0
- package/examples/client-configs/codex.windows.toml +11 -0
- package/examples/client-configs/gemini-code-assist.intellij.mcp.json +18 -0
- package/examples/client-configs/gemini.linux.settings.json +21 -0
- package/examples/client-configs/gemini.windows.settings.json +23 -0
- package/examples/client-configs/generic-stdio.json +16 -0
- package/manifests/channels/beta.json +25 -0
- package/manifests/channels/stable.json +26 -0
- package/network/approved-skills.json +5 -0
- package/package.json +60 -0
- package/scripts/configure-private-registry.mjs +124 -0
- package/scripts/lib/private-registry.mjs +56 -0
- package/sources.json +8 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# CHANGELOG
|
|
2
|
+
|
|
3
|
+
All notable changes to `skill_master` will be tracked here.
|
|
4
|
+
|
|
5
|
+
## [Unreleased]
|
|
6
|
+
|
|
7
|
+
- Prepare a public npm publication path with dedicated workflow and operator guide.
|
|
8
|
+
- Upgrade release automation from Node `20` to Node `22`.
|
|
9
|
+
|
|
10
|
+
## [0.0.2] - 2026-06-25
|
|
11
|
+
|
|
12
|
+
- Add private-registry setup helpers for Windows, Linux, and Node-based package flows.
|
|
13
|
+
- Ship a package-level `skill-master-configure-private-registry` bin for operator validation and repair.
|
|
14
|
+
- Include private-package docs and client config examples in the published tarball.
|
|
15
|
+
- Restore `npm run check` compatibility on Node `18+` and align manifest validation with stable ESM path handling.
|
|
16
|
+
- Expand operational docs for Codex, Claude, Gemini, and generic stdio MCP clients.
|
|
17
|
+
|
|
18
|
+
## [0.0.1] - 2026-06-25
|
|
19
|
+
|
|
20
|
+
- Bootstrap the independent `skill_master` MCP.
|
|
21
|
+
- Add `list_sources`, `search`, `recommend`, `sync_status`, `update_plan`, and `refresh_catalog`.
|
|
22
|
+
- Register local launcher/update scripts for Codex environments.
|
package/README.md
ADDED
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
# Skill Master MCP
|
|
2
|
+
|
|
3
|
+
Versao planejada: `00.02`
|
|
4
|
+
|
|
5
|
+
Este repositorio e a base independente do MCP `skill_master`. Ele nao pertence ao LinkBiz e deve evoluir como um projeto pessoal, preferencialmente publicado em um GitHub particular.
|
|
6
|
+
|
|
7
|
+
## Objetivo
|
|
8
|
+
|
|
9
|
+
Criar um MCP capaz de catalogar skills locais e remotas, recomendar as melhores skills para um prompt e manter atualizacoes automaticas para varios computadores e usuarios.
|
|
10
|
+
|
|
11
|
+
## Decisao da versao 00.02
|
|
12
|
+
|
|
13
|
+
A versao `00.02` consolida a distribuicao multiplataforma e o pacote privado:
|
|
14
|
+
|
|
15
|
+
- repositorio pessoal no GitHub como fonte de verdade
|
|
16
|
+
- manifesto remoto de versao e canal
|
|
17
|
+
- launcher local com verificacao de atualizacao
|
|
18
|
+
- atualizacao por `git pull --ff-only` quando o diretorio estiver limpo
|
|
19
|
+
- fallback seguro quando houver alteracoes locais
|
|
20
|
+
- arquitetura preparada para pacote npm privado, GitHub Releases e MCP remoto no futuro
|
|
21
|
+
|
|
22
|
+
## Compatibilidade atual
|
|
23
|
+
|
|
24
|
+
O projeto agora possui fluxo operacional para:
|
|
25
|
+
|
|
26
|
+
- Windows: `scripts/install-skill-master.ps1`, `scripts/update-skill-master.ps1`, `scripts/skill-master-launcher.ps1`
|
|
27
|
+
- Linux: `scripts/install-skill-master.sh`, `scripts/update-skill-master.sh`, `scripts/skill-master-launcher.sh`
|
|
28
|
+
- Clientes AI: Codex, Claude Desktop, Claude Code, Gemini CLI, Gemini Code Assist e clientes MCP genericos via stdio
|
|
29
|
+
|
|
30
|
+
Requisitos praticos nos dois ambientes:
|
|
31
|
+
|
|
32
|
+
- `git`
|
|
33
|
+
- `node` `18+`
|
|
34
|
+
- `npm`
|
|
35
|
+
- acesso ao repositorio GitHub configurado
|
|
36
|
+
|
|
37
|
+
## Instalacao rapida
|
|
38
|
+
|
|
39
|
+
### Windows
|
|
40
|
+
|
|
41
|
+
```powershell
|
|
42
|
+
powershell -ExecutionPolicy Bypass -File scripts/install-skill-master.ps1
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Linux
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
bash scripts/install-skill-master.sh
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Instalacao via pacote privado
|
|
52
|
+
|
|
53
|
+
O projeto agora tambem pode ser distribuido como pacote privado via GitHub Packages.
|
|
54
|
+
|
|
55
|
+
Nome do pacote:
|
|
56
|
+
|
|
57
|
+
```text
|
|
58
|
+
@fprad0/skill-master-mcp
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Fluxo resumido:
|
|
62
|
+
|
|
63
|
+
1. autenticar o `npm` no registry privado;
|
|
64
|
+
2. configurar o cliente MCP para executar `npx -y @fprad0/skill-master-mcp@latest`;
|
|
65
|
+
3. reiniciar o cliente.
|
|
66
|
+
|
|
67
|
+
Atalho operacional:
|
|
68
|
+
|
|
69
|
+
- Windows: `powershell -ExecutionPolicy Bypass -File .\scripts\configure-private-registry.ps1 -Validate`
|
|
70
|
+
- Linux: `bash ./scripts/configure-private-registry.sh --validate`
|
|
71
|
+
|
|
72
|
+
Bootstrap direto pelo pacote, para maquinas que ja conseguem resolver o escopo `@fprad0` no GitHub Packages:
|
|
73
|
+
|
|
74
|
+
- PowerShell: `$env:GITHUB_PACKAGES_TOKEN='SEU_TOKEN'; npx -y -p @fprad0/skill-master-mcp skill-master-configure-private-registry --validate`
|
|
75
|
+
- Bash: `GITHUB_PACKAGES_TOKEN='SEU_TOKEN' npx -y -p @fprad0/skill-master-mcp skill-master-configure-private-registry --validate`
|
|
76
|
+
|
|
77
|
+
Exemplo de `.npmrc`:
|
|
78
|
+
|
|
79
|
+
```ini
|
|
80
|
+
@fprad0:registry=https://npm.pkg.github.com
|
|
81
|
+
//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES_TOKEN}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Leia:
|
|
85
|
+
|
|
86
|
+
- [Guia de instalacao via pacote privado](docs/operations/GUIA_NPM_PRIVADO.md)
|
|
87
|
+
|
|
88
|
+
## Instalacao via npm publico
|
|
89
|
+
|
|
90
|
+
O repositório agora tambem pode ser preparado para distribuicao por `npmjs.org`, que e o caminho necessario para chegar em instalacao simples com:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
npm install -g @fprad0/skill-master-mcp
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Estado atual:
|
|
97
|
+
|
|
98
|
+
- o fluxo de publicacao publica foi preparado no repositório;
|
|
99
|
+
- o pacote `0.0.2` ainda nao esta publicado no npm publico neste momento;
|
|
100
|
+
- enquanto isso nao acontecer, o install simples por `npm install` continua bloqueado pelo uso de GitHub Packages privado.
|
|
101
|
+
|
|
102
|
+
Leia:
|
|
103
|
+
|
|
104
|
+
- [Guia de publicacao no npm publico](docs/operations/GUIA_NPM_PUBLICO.md)
|
|
105
|
+
|
|
106
|
+
## Registro no Codex
|
|
107
|
+
|
|
108
|
+
- Windows registra o MCP usando `powershell.exe`
|
|
109
|
+
- Linux registra o MCP usando `/usr/bin/env` + `bash`
|
|
110
|
+
|
|
111
|
+
Os dois caminhos configuram:
|
|
112
|
+
|
|
113
|
+
- `SKILL_MASTER_CONFIG`
|
|
114
|
+
- `SKILL_MASTER_CACHE`
|
|
115
|
+
- `SKILL_MASTER_MANIFEST_URL`
|
|
116
|
+
- `SKILL_MASTER_UPDATE_CHANNEL`
|
|
117
|
+
- `SKILL_MASTER_RELEASE_BRANCH`
|
|
118
|
+
|
|
119
|
+
## Compatibilidade com Claude e Gemini
|
|
120
|
+
|
|
121
|
+
A versao `00.02` documenta compatibilidade operacional com:
|
|
122
|
+
|
|
123
|
+
- Claude Desktop
|
|
124
|
+
- Claude Code
|
|
125
|
+
- Gemini CLI
|
|
126
|
+
- Gemini Code Assist
|
|
127
|
+
- Codex
|
|
128
|
+
- clientes MCP genericos
|
|
129
|
+
|
|
130
|
+
Leia:
|
|
131
|
+
|
|
132
|
+
- [Compatibilidade MCP 00.02](docs/clients/COMPATIBILIDADE_CLIENTES_MCP_00_02.md)
|
|
133
|
+
- [Exemplos de configuracao](examples/client-configs/)
|
|
134
|
+
|
|
135
|
+
## Rede segura de skills
|
|
136
|
+
|
|
137
|
+
O `skill_master` pode aprender com as skills ja existentes em cada maquina instalada, mas o compartilhamento entre computadores segue um fluxo seguro:
|
|
138
|
+
|
|
139
|
+
- catalogo local automatico;
|
|
140
|
+
- deduplicacao por nome e hash;
|
|
141
|
+
- pacote local de contribuicao;
|
|
142
|
+
- revisao de risco e privacidade;
|
|
143
|
+
- aprovacao humana antes de qualquer distribuicao.
|
|
144
|
+
|
|
145
|
+
Ferramentas MCP principais:
|
|
146
|
+
|
|
147
|
+
- `skill_master_refresh_catalog`
|
|
148
|
+
- `skill_master_prepare_skill_contribution`
|
|
149
|
+
- `skill_master_review_skill_contribution`
|
|
150
|
+
|
|
151
|
+
O pacote de contribuicao nao envia arquivos automaticamente, nao executa skills desconhecidas e nao inclui caminhos completos ou corpo bruto por padrao.
|
|
152
|
+
|
|
153
|
+
Leia:
|
|
154
|
+
|
|
155
|
+
- [Rede segura de skills](docs/architecture/REDE_SEGURA_DE_SKILLS.md)
|
|
156
|
+
|
|
157
|
+
## Arquivos principais
|
|
158
|
+
|
|
159
|
+
- [Plano geral](docs/PLANO_SKILL_MASTER_00_01.md)
|
|
160
|
+
- [Pesquisa de alternativas de atualizacao](docs/research/PESQUISA_ATUALIZACOES_AUTOMATICAS.md)
|
|
161
|
+
- [Arquitetura de atualizacao automatica](docs/architecture/ARQUITETURA_AUTO_UPDATE.md)
|
|
162
|
+
- [Rede segura de skills](docs/architecture/REDE_SEGURA_DE_SKILLS.md)
|
|
163
|
+
- [Operacao multi-computador](docs/operations/GUIA_MULTI_COMPUTADOR.md)
|
|
164
|
+
- [Prompt tasks de execucao](docs/prompt-tasks/)
|
|
165
|
+
|
|
166
|
+
## Regra de independencia
|
|
167
|
+
|
|
168
|
+
O `skill_master` nao deve importar codigo, paths, tokens, configuracoes ou convencoes especificas do LinkBiz. Ele pode ler skills locais do computador do usuario, mas sempre como fonte configuravel e nao como acoplamento fixo.
|
package/VERSION.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Versão
|
|
2
|
+
|
|
3
|
+
Versão funcional planejada: `00.02`
|
|
4
|
+
|
|
5
|
+
Versão técnica para empacotamento semântico: `0.0.2`
|
|
6
|
+
|
|
7
|
+
## Observação
|
|
8
|
+
|
|
9
|
+
O nome `00.02` será usado na comunicação e nos documentos. Para ferramentas que exigem SemVer, como npm e alguns fluxos de release, usar `0.0.2`.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { CatalogSnapshot, SkillRecord, SourcesConfig } from './types.js';
|
|
2
|
+
export declare const tokenize: (value: string) => string[];
|
|
3
|
+
export declare const parseSkillMarkdown: (markdown: string, source: Omit<SkillRecord, "id" | "name" | "description" | "headings" | "keywords" | "bodyPreview">) => SkillRecord | null;
|
|
4
|
+
export declare const loadConfig: (configPath: string) => Promise<SourcesConfig>;
|
|
5
|
+
export declare const buildCatalog: (config: SourcesConfig, options: {
|
|
6
|
+
cwd: string;
|
|
7
|
+
includeWeb: boolean;
|
|
8
|
+
}) => Promise<CatalogSnapshot>;
|
|
9
|
+
export declare const saveCatalog: (catalogPath: string, snapshot: CatalogSnapshot) => Promise<void>;
|
|
10
|
+
export declare const readCatalog: (catalogPath: string) => Promise<CatalogSnapshot | null>;
|
|
11
|
+
//# sourceMappingURL=catalog.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,eAAe,EAAE,WAAW,EAAmB,aAAa,EAAa,MAAM,YAAY,CAAC;AAW1G,eAAO,MAAM,QAAQ,GAAI,OAAO,MAAM,KAAG,MAAM,EAK7C,CAAC;AAQH,eAAO,MAAM,kBAAkB,GAC7B,UAAU,MAAM,EAChB,QAAQ,IAAI,CAAC,WAAW,EAAE,IAAI,GAAG,MAAM,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,aAAa,CAAC,KACjG,WAAW,GAAG,IAyBhB,CAAC;AA6GF,eAAO,MAAM,UAAU,GAAU,YAAY,MAAM,KAAG,OAAO,CAAC,aAAa,CAG1E,CAAC;AAEF,eAAO,MAAM,YAAY,GACvB,QAAQ,aAAa,EACrB,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,KAC5C,OAAO,CAAC,eAAe,CA2BzB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,aAAa,MAAM,EAAE,UAAU,eAAe,KAAG,OAAO,CAAC,IAAI,CAG9F,CAAC;AAEF,eAAO,MAAM,WAAW,GAAU,aAAa,MAAM,KAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAMrF,CAAC"}
|
package/dist/catalog.js
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { promises as fs } from 'node:fs';
|
|
3
|
+
import os from 'node:os';
|
|
4
|
+
import path from 'node:path';
|
|
5
|
+
const MAX_SKILL_BYTES = 256_000;
|
|
6
|
+
const MAX_WEB_SKILLS_PER_SOURCE = 250;
|
|
7
|
+
const USER_AGENT = 'skill-master-mcp/0.0.1';
|
|
8
|
+
const normalizeText = (value) => value
|
|
9
|
+
.normalize('NFD')
|
|
10
|
+
.replace(/[\u0300-\u036f]/g, '')
|
|
11
|
+
.toLowerCase();
|
|
12
|
+
export const tokenize = (value) => [...new Set(normalizeText(value)
|
|
13
|
+
.split(/[^a-z0-9+#.]+/)
|
|
14
|
+
.map((token) => token.trim())
|
|
15
|
+
.filter((token) => token.length >= 2))];
|
|
16
|
+
const parseFrontmatterField = (frontmatter, field) => {
|
|
17
|
+
const line = frontmatter.split(/\r?\n/).find((entry) => entry.startsWith(`${field}:`));
|
|
18
|
+
if (!line)
|
|
19
|
+
return '';
|
|
20
|
+
return line.slice(field.length + 1).trim().replace(/^['"]|['"]$/g, '');
|
|
21
|
+
};
|
|
22
|
+
export const parseSkillMarkdown = (markdown, source) => {
|
|
23
|
+
const match = markdown.match(/^---\s*\r?\n([\s\S]*?)\r?\n---\s*\r?\n?/);
|
|
24
|
+
if (!match?.[1])
|
|
25
|
+
return null;
|
|
26
|
+
const name = parseFrontmatterField(match[1], 'name');
|
|
27
|
+
const description = parseFrontmatterField(match[1], 'description');
|
|
28
|
+
if (!name || !description)
|
|
29
|
+
return null;
|
|
30
|
+
const body = markdown.slice(match[0].length);
|
|
31
|
+
const headings = body
|
|
32
|
+
.split(/\r?\n/)
|
|
33
|
+
.filter((line) => /^#{1,3}\s+/.test(line))
|
|
34
|
+
.map((line) => line.replace(/^#{1,3}\s+/, '').trim())
|
|
35
|
+
.slice(0, 20);
|
|
36
|
+
const keywords = tokenize(`${name} ${description} ${headings.join(' ')}`);
|
|
37
|
+
const id = createHash('sha256').update(`${source.sourceKind}:${source.location}`).digest('hex').slice(0, 16);
|
|
38
|
+
const contentHash = createHash('sha256').update(markdown).digest('hex');
|
|
39
|
+
return {
|
|
40
|
+
...source,
|
|
41
|
+
id,
|
|
42
|
+
name,
|
|
43
|
+
description,
|
|
44
|
+
contentHash,
|
|
45
|
+
headings,
|
|
46
|
+
keywords,
|
|
47
|
+
bodyPreview: body.replace(/\s+/g, ' ').trim().slice(0, 600),
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
const expandRoot = (root, cwd) => {
|
|
51
|
+
const expanded = root.replace(/^%USERPROFILE%/i, os.homedir()).replace(/\\/g, '/');
|
|
52
|
+
return path.resolve(cwd, expanded);
|
|
53
|
+
};
|
|
54
|
+
const findSkillFiles = async (root) => {
|
|
55
|
+
const found = [];
|
|
56
|
+
const visit = async (directory) => {
|
|
57
|
+
let entries;
|
|
58
|
+
try {
|
|
59
|
+
entries = await fs.readdir(directory, { withFileTypes: true });
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
for (const entry of entries) {
|
|
65
|
+
if (entry.name === 'node_modules' || entry.name === '.git' || entry.name === 'dist')
|
|
66
|
+
continue;
|
|
67
|
+
const fullPath = path.join(directory, entry.name);
|
|
68
|
+
if (entry.isDirectory())
|
|
69
|
+
await visit(fullPath);
|
|
70
|
+
else if (entry.isFile() && entry.name === 'SKILL.md')
|
|
71
|
+
found.push(fullPath);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
await visit(root);
|
|
75
|
+
return found;
|
|
76
|
+
};
|
|
77
|
+
const classifyRoot = (root, cwd) => {
|
|
78
|
+
if (root.startsWith(cwd))
|
|
79
|
+
return 'workspace';
|
|
80
|
+
if (root.includes(`${path.sep}plugins${path.sep}`))
|
|
81
|
+
return 'plugin';
|
|
82
|
+
return 'local';
|
|
83
|
+
};
|
|
84
|
+
const scanLocalRoot = async (root, cwd) => {
|
|
85
|
+
const sourceKind = classifyRoot(root, cwd);
|
|
86
|
+
const files = await findSkillFiles(root);
|
|
87
|
+
const records = [];
|
|
88
|
+
for (const file of files) {
|
|
89
|
+
const stats = await fs.stat(file);
|
|
90
|
+
if (stats.size > MAX_SKILL_BYTES)
|
|
91
|
+
continue;
|
|
92
|
+
const markdown = await fs.readFile(file, 'utf8');
|
|
93
|
+
const parsed = parseSkillMarkdown(markdown, {
|
|
94
|
+
sourceKind,
|
|
95
|
+
sourceLabel: path.basename(root),
|
|
96
|
+
location: file,
|
|
97
|
+
trusted: true,
|
|
98
|
+
modifiedAt: stats.mtime.toISOString(),
|
|
99
|
+
});
|
|
100
|
+
if (parsed)
|
|
101
|
+
records.push(parsed);
|
|
102
|
+
}
|
|
103
|
+
return records;
|
|
104
|
+
};
|
|
105
|
+
const fetchJson = async (url) => {
|
|
106
|
+
const response = await fetch(url, {
|
|
107
|
+
headers: { Accept: 'application/vnd.github+json', 'User-Agent': USER_AGENT },
|
|
108
|
+
signal: AbortSignal.timeout(15_000),
|
|
109
|
+
});
|
|
110
|
+
if (!response.ok)
|
|
111
|
+
throw new Error(`HTTP ${response.status} em ${new URL(url).hostname}`);
|
|
112
|
+
return response.json();
|
|
113
|
+
};
|
|
114
|
+
const scanWebSource = async (source) => {
|
|
115
|
+
if (!/^[a-zA-Z0-9_.-]+\/[a-zA-Z0-9_.-]+$/.test(source.repository)) {
|
|
116
|
+
throw new Error(`Repositório inválido em ${source.name}`);
|
|
117
|
+
}
|
|
118
|
+
const treeUrl = `https://api.github.com/repos/${source.repository}/git/trees/${encodeURIComponent(source.branch)}?recursive=1`;
|
|
119
|
+
const tree = await fetchJson(treeUrl);
|
|
120
|
+
const skillPaths = (tree.tree ?? [])
|
|
121
|
+
.filter((entry) => entry.type === 'blob' && entry.path?.endsWith('/SKILL.md'))
|
|
122
|
+
.map((entry) => entry.path)
|
|
123
|
+
.filter((entry) => Boolean(entry))
|
|
124
|
+
.slice(0, MAX_WEB_SKILLS_PER_SOURCE);
|
|
125
|
+
const records = [];
|
|
126
|
+
for (let offset = 0; offset < skillPaths.length; offset += 8) {
|
|
127
|
+
const batch = skillPaths.slice(offset, offset + 8);
|
|
128
|
+
const parsedBatch = await Promise.all(batch.map(async (skillPath) => {
|
|
129
|
+
const rawUrl = `https://raw.githubusercontent.com/${source.repository}/${encodeURIComponent(source.branch)}/${skillPath}`;
|
|
130
|
+
const response = await fetch(rawUrl, { headers: { 'User-Agent': USER_AGENT }, signal: AbortSignal.timeout(10_000) });
|
|
131
|
+
if (!response.ok)
|
|
132
|
+
return null;
|
|
133
|
+
const markdown = (await response.text()).slice(0, MAX_SKILL_BYTES);
|
|
134
|
+
return parseSkillMarkdown(markdown, {
|
|
135
|
+
sourceKind: 'web',
|
|
136
|
+
sourceLabel: source.name,
|
|
137
|
+
location: `https://github.com/${source.repository}/blob/${source.branch}/${skillPath}`,
|
|
138
|
+
trusted: false,
|
|
139
|
+
});
|
|
140
|
+
}));
|
|
141
|
+
records.push(...parsedBatch.filter((record) => record !== null));
|
|
142
|
+
}
|
|
143
|
+
return records;
|
|
144
|
+
};
|
|
145
|
+
const sourcePriority = { workspace: 4, local: 3, plugin: 2, web: 1 };
|
|
146
|
+
const deduplicateSkills = (skills) => {
|
|
147
|
+
const byName = new Map();
|
|
148
|
+
for (const skill of skills) {
|
|
149
|
+
const key = normalizeText(skill.name);
|
|
150
|
+
const current = byName.get(key);
|
|
151
|
+
if (!current || sourcePriority[skill.sourceKind] > sourcePriority[current.sourceKind])
|
|
152
|
+
byName.set(key, skill);
|
|
153
|
+
}
|
|
154
|
+
return [...byName.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
155
|
+
};
|
|
156
|
+
export const loadConfig = async (configPath) => {
|
|
157
|
+
const raw = await fs.readFile(configPath, 'utf8');
|
|
158
|
+
return JSON.parse(raw);
|
|
159
|
+
};
|
|
160
|
+
export const buildCatalog = async (config, options) => {
|
|
161
|
+
const warnings = [];
|
|
162
|
+
const localRoots = [...config.localRoots, ...config.workspaceRoots]
|
|
163
|
+
.map((root) => expandRoot(root, options.cwd));
|
|
164
|
+
const localResults = await Promise.all(localRoots.map(async (root) => {
|
|
165
|
+
try {
|
|
166
|
+
return await scanLocalRoot(root, options.cwd);
|
|
167
|
+
}
|
|
168
|
+
catch (error) {
|
|
169
|
+
warnings.push(`Falha ao catalogar ${root}: ${error instanceof Error ? error.message : 'erro desconhecido'}`);
|
|
170
|
+
return [];
|
|
171
|
+
}
|
|
172
|
+
}));
|
|
173
|
+
const webResults = [];
|
|
174
|
+
if (options.includeWeb) {
|
|
175
|
+
for (const source of config.webSources.filter((entry) => entry.enabled)) {
|
|
176
|
+
try {
|
|
177
|
+
webResults.push(await scanWebSource(source));
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
warnings.push(`Falha na fonte web ${source.name}: ${error instanceof Error ? error.message : 'erro desconhecido'}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
return {
|
|
185
|
+
generatedAt: new Date().toISOString(),
|
|
186
|
+
skills: deduplicateSkills([...localResults.flat(), ...webResults.flat()]),
|
|
187
|
+
warnings,
|
|
188
|
+
};
|
|
189
|
+
};
|
|
190
|
+
export const saveCatalog = async (catalogPath, snapshot) => {
|
|
191
|
+
await fs.mkdir(path.dirname(catalogPath), { recursive: true });
|
|
192
|
+
await fs.writeFile(catalogPath, JSON.stringify(snapshot, null, 2), 'utf8');
|
|
193
|
+
};
|
|
194
|
+
export const readCatalog = async (catalogPath) => {
|
|
195
|
+
try {
|
|
196
|
+
return JSON.parse(await fs.readFile(catalogPath, 'utf8'));
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
return null;
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
//# sourceMappingURL=catalog.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.js","sourceRoot":"","sources":["../src/catalog.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|