maestro-skills 0.1.1 → 0.1.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.
Files changed (57) hide show
  1. package/README.md +11 -291
  2. package/{packages/maestro-skills/bin → bin}/cli.js +2 -2
  3. package/{packages/rodovalhofs-maestro/lib → lib}/paths.js +25 -4
  4. package/{packages/maestro-skills/lib → lib}/run-manifest.js +10 -2
  5. package/lib/setup.js +130 -0
  6. package/package.json +48 -35
  7. package/.github/workflows/ci.yml +0 -26
  8. package/.github/workflows/publish-npm.yml +0 -30
  9. package/CONTRIBUTING.md +0 -31
  10. package/LICENSE +0 -21
  11. package/SECURITY.md +0 -33
  12. package/docs/github-workflow.md +0 -96
  13. package/docs/maestro-skills-cli.md +0 -113
  14. package/packages/maestro-skills/README.md +0 -37
  15. package/packages/maestro-skills/lib/paths.js +0 -42
  16. package/packages/maestro-skills/lib/setup.js +0 -115
  17. package/packages/maestro-skills/package.json +0 -47
  18. package/packages/maestro-skills/test/agents.test.js +0 -17
  19. package/packages/rodovalhofs-maestro/agents.json +0 -36
  20. package/packages/rodovalhofs-maestro/bin/cli.js +0 -10
  21. package/packages/rodovalhofs-maestro/lib/detect-agents.js +0 -28
  22. package/packages/rodovalhofs-maestro/lib/install.js +0 -58
  23. package/packages/rodovalhofs-maestro/lib/remove.js +0 -71
  24. package/packages/rodovalhofs-maestro/lib/run-manifest.js +0 -92
  25. package/packages/rodovalhofs-maestro/lib/setup.js +0 -115
  26. package/packages/rodovalhofs-maestro/package.json +0 -33
  27. package/scripts/sync-skill-to-cli.mjs +0 -75
  28. package/scripts/sync-templates.ps1 +0 -22
  29. package/templates/.github/ISSUE_TEMPLATE/bug_report.yml +0 -34
  30. package/templates/.github/ISSUE_TEMPLATE/chore.yml +0 -17
  31. package/templates/.github/ISSUE_TEMPLATE/config.yml +0 -1
  32. package/templates/.github/ISSUE_TEMPLATE/feature_request.yml +0 -27
  33. package/templates/.github/workflows/ci-failure-to-issue.yml +0 -47
  34. package/templates/.github/workflows/ci.yml +0 -27
  35. package/templates/CONTRIBUTING.md +0 -22
  36. package/templates/labels.json +0 -12
  37. package/templates/pull_request_template.md +0 -18
  38. package/tests/fixtures/sample-manifest.json +0 -76
  39. package/tests/test_concept_gaps.py +0 -63
  40. package/tests/test_maestro_paths.py +0 -29
  41. package/tests/test_search_routing.py +0 -161
  42. /package/{packages/maestro-skills/agents.json → agents.json} +0 -0
  43. /package/{packages/maestro-skills/lib → lib}/detect-agents.js +0 -0
  44. /package/{packages/maestro-skills/lib → lib}/install.js +0 -0
  45. /package/{packages/maestro-skills/lib → lib}/remove.js +0 -0
  46. /package/{skills/maestro → skill}/SKILL.md +0 -0
  47. /package/{skills/maestro → skill}/maestro-exclude.example.txt +0 -0
  48. /package/{skills/maestro → skill}/scripts/bm25.py +0 -0
  49. /package/{skills/maestro → skill}/scripts/build_manifest.py +0 -0
  50. /package/{skills/maestro → skill}/scripts/concept_gaps.py +0 -0
  51. /package/{skills/maestro → skill}/scripts/domains.py +0 -0
  52. /package/{skills/maestro → skill}/scripts/intents.py +0 -0
  53. /package/{skills/maestro → skill}/scripts/maestro_paths.py +0 -0
  54. /package/{skills/maestro → skill}/scripts/route_tasks.py +0 -0
  55. /package/{skills/maestro → skill}/scripts/routing.py +0 -0
  56. /package/{skills/maestro → skill}/scripts/search_skills.py +0 -0
  57. /package/{skills/maestro → skill}/scripts/synonyms.py +0 -0
package/README.md CHANGED
@@ -1,300 +1,20 @@
1
- # Maestro
1
+ # maestro-skills
2
2
 
3
- [![CI](https://github.com/rodovalhofs/maestro/actions/workflows/ci.yml/badge.svg)](https://github.com/rodovalhofs/maestro/actions/workflows/ci.yml)
4
- [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
5
-
6
- **Maestro** é um meta-orquestrador de skills para agentes de IA (Cursor, Claude Code, Codex e outros). Você descreve a tarefa; ele descobre quais skills locais usar, monta um **grafo de dependências editável**, pede sua confirmação e só então dispara subagentes com os `SKILL.md` certos.
7
-
8
- Se faltar skill no ecossistema (ex.: `skeleton-loader`), o Maestro abre o ramo **Discover** via [find-skills](https://skills.sh/) (`npx skills find`), instala, regenera o índice e roteia de novo.
9
-
10
- > Motor **local e rápido** (BM25 + manifest JSON) — sem re-scan do filesystem a cada busca.
11
- > Inspirado em ideias de [task-skill-router](https://github.com/wcqxgjy6d8-pixel/task-skill-router).
12
-
13
- ---
14
-
15
- ## O que o Maestro faz (e o que não faz)
16
-
17
- | Faz | Não faz |
18
- |-----|---------|
19
- | Analisa seu prompt e busca skills **já instaladas** | Implementar código por conta própria |
20
- | Monta um grafo de nós (pesquisa → implementação → CI…) | Spawnar subagentes sem você confirmar o grafo |
21
- | Detecta **lacunas de conceito** (`skeleton-loader`, libs citadas no prompt) | Substituir o agente principal do Cursor |
22
- | Sugere instalar skills via `npx skills find` quando necessário | Enviar dados para servidores externos |
23
- | Roteia com prioridade **P0–P3** (auto-load vs recomendar) | Ignorar tarefas de alto risco (deploy, secrets) sem confirmação |
24
-
25
- ### Em uma frase
26
-
27
- O Maestro responde: *“Para esta tarefa, quais skills devo usar, em que ordem, e preciso instalar algo novo?”*
28
-
29
- ---
30
-
31
- ## Fluxo completo
32
-
33
- ```text
34
- Seu prompt
35
-
36
-
37
- build_manifest.py ← índice local (~/.maestro/skills-manifest.json)
38
-
39
-
40
- search_skills.py ← BM25 + intents + sinônimos + concept gaps
41
-
42
- ├─ match forte, sem lacunas
43
- │ └─► Grafo único → você confirma → subagentes executam
44
-
45
- └─ discover.triggered
46
-
47
-
48
- npx skills find ← pré-busca no ecossistema (skills.sh)
49
-
50
-
51
- Grafo 1 (Discover + fallback local) → você: ok
52
-
53
-
54
- find-skills install + build_manifest.py
55
-
56
-
57
- Grafo 2 (execução) → você: ok
58
-
59
-
60
- subagentes com SKILL.md explícito → síntese final
61
- ```
62
-
63
- ### Quando o ramo Discover abre
64
-
65
- | Sinal | Exemplo |
66
- |-------|---------|
67
- | `weak_match` | Nenhuma skill local confiável para o prompt |
68
- | `concept_gap` | *“colocar skeleton-loader na UI”* — termo sem skill local |
69
- | `force_discover` | *“find a skill for changelog”*, `npx skills find` |
70
- | `single_local_skill` | Só um candidato local e score baixo |
71
-
72
- Máximo de **2** gaps por prompt; extras viram nota no grafo para você editar.
73
-
74
- ---
75
-
76
- ## Instalação
77
-
78
- ### Opção A — `npx maestro-skills setup` (recomendado)
79
-
80
- Setup interativo — escolha agentes e escopo (global ou projeto).
81
-
82
- **Se `npx maestro-skills` retornar 404**, o pacote ainda não está no npm registry — use o GitHub (funciona agora):
83
-
84
- ```bash
85
- npx github:rodovalhofs/maestro maestro-skills setup
86
- ```
87
-
88
- **Após publicação no npm** (v0.1.1+):
3
+ CLI de instalação interativa do [Maestro](https://github.com/rodovalhofs/maestro).
89
4
 
90
5
  ```bash
91
6
  npx maestro-skills setup
92
7
  ```
93
8
 
94
- | Agente | Pasta | Flag |
95
- |--------|-------|------|
96
- | Cursor | `~/.cursor/skills/maestro` | `--cursor` |
97
- | Claude Code | `~/.claude/skills/maestro` | `--claude` |
98
- | Codex | `~/.codex/skills/maestro` | `--codex` |
99
- | Universal | `~/.agents/skills/maestro` | `--universal` |
100
-
101
- Exemplos:
102
-
103
- ```bash
104
- npx maestro-skills setup --codex --cursor -y # Codex + Cursor, sem prompts
105
- npx maestro-skills setup --project # só o repo atual
106
- npx @rodovalhofs/maestro setup # fallback (bin curto)
107
- ```
108
-
109
- Documentação completa: [docs/maestro-skills-cli.md](docs/maestro-skills-cli.md)
110
-
111
- ### Opção B — `npx skills add` (catálogo skills.sh)
112
-
113
- ```bash
114
- npx skills add rodovalhofs/maestro --skill maestro -g -a cursor -a codex -y
115
- ```
116
-
117
- ### Opção C — Git clone (manual)
118
-
119
- ```powershell
120
- # Windows
121
- git clone https://github.com/rodovalhofs/maestro.git
122
- Copy-Item -Recurse -Force maestro\skills\maestro $env:USERPROFILE\.cursor\skills\maestro
123
- # ou: $env:USERPROFILE\.codex\skills\maestro
124
- ```
125
-
126
- ```bash
127
- # macOS / Linux
128
- git clone https://github.com/rodovalhofs/maestro.git
129
- cp -r maestro/skills/maestro ~/.cursor/skills/maestro
130
- # ou: ~/.codex/skills/maestro
131
- ```
132
-
133
- ### Pós-instalação (obrigatório)
134
-
135
- Indexe suas skills locais (todos os agentes):
136
-
137
- ```bash
138
- # Windows
139
- py -3 %USERPROFILE%\.cursor\skills\maestro\scripts\build_manifest.py --project-root .
140
-
141
- # macOS / Linux
142
- python3 ~/.cursor/skills/maestro/scripts/build_manifest.py --project-root .
143
- ```
144
-
145
- Manifest gerado em `~/.maestro/skills-manifest.json`.
146
-
147
- ### Opcional — excluir skills da busca
148
-
149
- ```bash
150
- cp ~/.cursor/skills/maestro/maestro-exclude.example.txt ~/.cursor/maestro-exclude.txt
151
- # edite o arquivo e regenere o manifest
152
- ```
153
-
154
- ---
155
-
156
- ## Pré-requisitos
157
-
158
- | Ferramenta | Obrigatório | Uso |
159
- |------------|-------------|-----|
160
- | **Cursor** | Sim | Agent skills em `~/.cursor/skills` e/ou `~/.agents/skills` |
161
- | **Python 3.12+** | Sim | Scripts de busca e manifest (mesma versão do CI) |
162
- | **Node.js** | Para Discover | `npx skills find` / `npx skills add` no ramo find-skills |
163
-
164
- ---
165
-
166
- ## Uso no Cursor
167
-
168
- Invoque com **`$maestro`** ou **`/maestro`** + sua tarefa:
169
-
170
- ```text
171
- $maestro criar dashboard de vendas com React e gráficos
172
- $maestro vamos colocar skeleton-loader na tela de produtos
173
- $maestro corrigir CI quebrado no PR #42
174
- ```
175
-
176
- O agente segue o `SKILL.md` do Maestro: busca → grafo editável → confirmação → execução.
177
-
178
- ### Ferramentas CLI (uso direto ou debug)
179
-
180
- **1. Regenerar manifest**
181
-
182
- ```bash
183
- py -3 ~/.cursor/skills/maestro/scripts/build_manifest.py --project-root /caminho/do/projeto
184
- ```
185
-
186
- **2. Buscar skills para um prompt**
187
-
188
- ```bash
189
- py -3 ~/.cursor/skills/maestro/scripts/search_skills.py "criar dashboard react" --json
190
- ```
191
-
192
- Campos úteis no JSON:
193
-
194
- | Campo | Significado |
195
- |-------|-------------|
196
- | `results` | Skills locais ranqueadas (score, confidence, path) |
197
- | `routing` | `P0`–`P3` e decisão (`auto-load`, `recommend`, `bypass`) |
198
- | `discover` | `triggered`, `reasons`, `gaps`, `queries`, `local_fallback` |
199
- | `weak_match` | Match local fraco — pode pedir domínio ou Discover |
200
-
201
- **3. Rotear sub-tarefas (grafo decomposto)**
202
-
203
- ```bash
204
- printf '%s\n' "design UI" "fix CI" | py -3 ~/.cursor/skills/maestro/scripts/route_tasks.py --json
205
- ```
206
-
207
- **Domínios** (`--domain`): `web`, `data-viz`, `analytics`, `design`, `creative`, `devops-git`, `video-media`, `integrations`, `security`, `meta`, `general`.
208
-
209
- ---
210
-
211
- ## Exemplos de comportamento
212
-
213
- ### Tarefa com skill local clara
214
-
215
- ```text
216
- Prompt: corrigir CI quebrado no PR
217
- → discover.triggered: false
218
- → top: gh-fix-ci, github
219
- → Grafo: 1 nó → você confirma → subagente executa
220
- ```
221
-
222
- ### Conceito sem skill local
223
-
224
- ```text
225
- Prompt: vamos colocar skeleton-loader na UI
226
- → discover.triggered: true (concept_gap: skeleton-loader)
227
- → npx skills find "skeleton-loader ui web"
228
- → Grafo 1 com Discover → install → Grafo 2 → implementação
229
- ```
230
-
231
- ### Descoberta explícita
232
-
233
- ```text
234
- Prompt: find a skill for changelog
235
- → discover.triggered: true (force_discover)
236
- → find-skills busca no skills.sh
237
- ```
238
-
239
- ---
240
-
241
- ## O que há neste repositório
242
-
243
- | Pasta | Conteúdo |
244
- |-------|----------|
245
- | `skills/maestro/` | Skill Cursor + scripts Python (`search_skills`, `concept_gaps`, …) |
246
- | `tests/` | 18+ testes do motor de busca |
247
- | `docs/` | Fluxo GitHub genérico (Issues + PR + CI) |
248
- | `templates/` | Issue templates, PR template e workflows para copiar em outros projetos |
249
-
250
- ```text
251
- maestro/
252
- ├── .github/workflows/ci.yml
253
- ├── skills/maestro/
254
- │ ├── SKILL.md ← regras do orquestrador
255
- │ ├── maestro-exclude.example.txt
256
- │ └── scripts/
257
- │ ├── build_manifest.py
258
- │ ├── search_skills.py
259
- │ ├── concept_gaps.py
260
- │ ├── route_tasks.py
261
- │ └── …
262
- ├── tests/
263
- ├── docs/github-workflow.md
264
- └── templates/
265
- ```
266
-
267
- ---
268
-
269
- ## Testes
270
-
271
- ```bash
272
- py -3 -m unittest discover -s tests -v
273
- ```
274
-
275
- ---
276
-
277
- ## Templates GitHub
278
-
279
- Copie workflows e templates de Issue/PR para outro repositório:
280
-
281
- ```powershell
282
- # Atenção: sobrescreve .github/ no destino
283
- .\scripts\sync-templates.ps1 -TargetRepo "C:\caminho\do\seu\projeto"
284
- ```
285
-
286
- Detalhes: [docs/github-workflow.md](docs/github-workflow.md)
287
-
288
- ---
289
-
290
- ## Contribuir
291
-
292
- Veja [CONTRIBUTING.md](CONTRIBUTING.md). Issues e PRs são bem-vindos.
293
-
294
- ## Segurança
9
+ [![npm](https://img.shields.io/npm/v/maestro-skills)](https://www.npmjs.com/package/maestro-skills)
295
10
 
296
- Veja [SECURITY.md](SECURITY.md). O Maestro lê apenas pastas locais de skills; revise pacotes de `npx skills find` antes de instalar.
11
+ ## Agentes
297
12
 
298
- ## Licença
13
+ | Agente | Flag |
14
+ |--------|------|
15
+ | Cursor | `--cursor` |
16
+ | Claude Code | `--claude` |
17
+ | Codex | `--codex` |
18
+ | Universal | `--universal` |
299
19
 
300
- [MIT](LICENSE) — Copyright (c) 2026 Yuri Rodovalho
20
+ Docs: [maestro-skills-cli.md](../../docs/maestro-skills-cli.md)
@@ -1,4 +1,4 @@
1
- #!/usr/bin/env node
1
+ #!/usr/bin/env node
2
2
  import { Command } from "commander";
3
3
  import { runRemove } from "../lib/remove.js";
4
4
  import { runSetup } from "../lib/setup.js";
@@ -8,7 +8,7 @@ const program = new Command();
8
8
  program
9
9
  .name("maestro-skills")
10
10
  .description("Install and configure the Maestro skill orchestrator for multiple AI agents")
11
- .version("0.1.1");
11
+ .version("0.1.2");
12
12
 
13
13
  program
14
14
  .command("setup")
@@ -1,10 +1,10 @@
1
- import { readFileSync } from "node:fs";
1
+ import { existsSync, readFileSync } from "node:fs";
2
2
  import { homedir } from "node:os";
3
- import { dirname, join } from "node:path";
3
+ import { dirname, join, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
 
6
6
  const __dirname = dirname(fileURLToPath(import.meta.url));
7
- const PACKAGE_ROOT = join(__dirname, "..");
7
+ const PACKAGE_ROOT = resolve(__dirname, "..");
8
8
 
9
9
  export function getMaestroHome() {
10
10
  return process.env.MAESTRO_HOME || join(homedir(), ".maestro");
@@ -33,8 +33,29 @@ export function resolveSkillsDir(agent, { project = false, cwd = process.cwd() }
33
33
  return join(base, rel);
34
34
  }
35
35
 
36
+ /** Resolve bundled skill folder (works for npm pack and monorepo-root publish). */
36
37
  export function skillSourceDir() {
37
- return join(PACKAGE_ROOT, "skill");
38
+ const candidates = [];
39
+
40
+ let dir = PACKAGE_ROOT;
41
+ for (let i = 0; i < 5; i++) {
42
+ candidates.push(
43
+ join(dir, "skill"),
44
+ join(dir, "skills", "maestro"),
45
+ );
46
+ dir = resolve(dir, "..");
47
+ }
48
+
49
+ for (const candidate of candidates) {
50
+ if (existsSync(join(candidate, "SKILL.md"))) {
51
+ return candidate;
52
+ }
53
+ }
54
+
55
+ throw new Error(
56
+ `Skill source not found (expected SKILL.md under ${join(PACKAGE_ROOT, "skill")}). ` +
57
+ "Reinstall with: npx maestro-skills@latest setup",
58
+ );
38
59
  }
39
60
 
40
61
  export function bundledBuildManifest() {
@@ -1,5 +1,6 @@
1
1
  import { spawnSync } from "node:child_process";
2
2
  import { existsSync } from "node:fs";
3
+ import { join } from "node:path";
3
4
  import { bundledBuildManifest, getMaestroPaths } from "./paths.js";
4
5
 
5
6
  function pythonCommand() {
@@ -14,8 +15,15 @@ function pythonCommand() {
14
15
  return null;
15
16
  }
16
17
 
17
- export function runBuildManifest({ projectRoot = process.cwd(), quiet = false } = {}) {
18
- const script = bundledBuildManifest();
18
+ export function runBuildManifest({
19
+ projectRoot = process.cwd(),
20
+ quiet = false,
21
+ installedSkillPath = null,
22
+ } = {}) {
23
+ let script = bundledBuildManifest();
24
+ if (!existsSync(script) && installedSkillPath) {
25
+ script = join(installedSkillPath, "scripts", "build_manifest.py");
26
+ }
19
27
  if (!existsSync(script)) {
20
28
  return { ok: false, error: `build_manifest.py not found at ${script}` };
21
29
  }
package/lib/setup.js ADDED
@@ -0,0 +1,130 @@
1
+ import * as p from "@clack/prompts";
2
+ import { detectAgents, filterAgentsByFlags } from "./detect-agents.js";
3
+ import {
4
+ copySkillTo,
5
+ migrateLegacyFiles,
6
+ saveSetupConfig,
7
+ } from "./install.js";
8
+ import { getMaestroPaths } from "./paths.js";
9
+ import { registerOnSkillsSh, runBuildManifest } from "./run-manifest.js";
10
+
11
+ export async function runSetup(options) {
12
+ const project = Boolean(options.project);
13
+ const cwd = process.cwd();
14
+
15
+ p.intro(project ? "Maestro setup (this project)" : "Maestro setup (global)");
16
+
17
+ let agents = detectAgents({ project, cwd });
18
+ agents = filterAgentsByFlags(agents, options);
19
+
20
+ if (!options.cursor && !options.claude && !options.codex && !options.universal && !options.yes) {
21
+ p.note(
22
+ "↑↓ navegar · Espaço selecionar/desmarcar · Enter confirmar",
23
+ "Atalhos do teclado",
24
+ );
25
+
26
+ const selected = await p.multiselect({
27
+ message: "Which agents should receive the Maestro skill?",
28
+ options: agents.map((a) => ({
29
+ value: a.id,
30
+ label: a.label,
31
+ hint: a.detected ? `${a.skillsPath} (detected)` : a.skillsPath,
32
+ })),
33
+ required: true,
34
+ initialValues: [],
35
+ });
36
+ if (p.isCancel(selected)) {
37
+ p.cancel("Setup cancelled.");
38
+ process.exit(0);
39
+ }
40
+ agents = agents.filter((a) => selected.includes(a.id));
41
+ } else if (options.cursor || options.claude || options.codex || options.universal) {
42
+ agents = filterAgentsByFlags(agents, options);
43
+ } else if (options.yes) {
44
+ agents = agents.filter((a) => a.detected);
45
+ if (!agents.length) agents = detectAgents({ project, cwd });
46
+ }
47
+
48
+ if (!agents.length) {
49
+ p.cancel("No agents selected.");
50
+ process.exit(1);
51
+ }
52
+
53
+ let registerSkillsSh = false;
54
+ if (!options.yes && !options.noSkillsRegistry) {
55
+ const reg = await p.confirm({
56
+ message: "Register install on skills.sh via npx skills add? (optional telemetry)",
57
+ initialValue: false,
58
+ });
59
+ if (p.isCancel(reg)) {
60
+ p.cancel("Setup cancelled.");
61
+ process.exit(0);
62
+ }
63
+ registerSkillsSh = Boolean(reg);
64
+ }
65
+
66
+ const spinner = p.spinner();
67
+ const installed = [];
68
+
69
+ for (const agent of agents) {
70
+ spinner.start(`Installing Maestro for ${agent.label}…`);
71
+ try {
72
+ const dest = copySkillTo(agent.skillsPath);
73
+ installed.push({ id: agent.id, label: agent.label, path: dest });
74
+ spinner.stop(`Installed → ${dest}`);
75
+ } catch (err) {
76
+ spinner.stop(`Failed for ${agent.label}`);
77
+ p.log.error(String(err.message || err));
78
+ }
79
+ }
80
+
81
+ if (!installed.length) {
82
+ p.cancel("Setup failed — Maestro skill was not installed for any agent.");
83
+ process.exit(1);
84
+ }
85
+
86
+ const migrated = migrateLegacyFiles();
87
+ if (migrated.length) {
88
+ p.log.info(`Migrated legacy files: ${migrated.join(", ")}`);
89
+ }
90
+
91
+ spinner.start("Building skills manifest…");
92
+ const manifestResult = runBuildManifest({
93
+ projectRoot: cwd,
94
+ quiet: true,
95
+ installedSkillPath: installed[0]?.path,
96
+ });
97
+ if (manifestResult.ok) {
98
+ spinner.stop(manifestResult.message);
99
+ } else {
100
+ spinner.stop("Manifest build failed");
101
+ p.log.warn(manifestResult.error);
102
+ }
103
+
104
+ if (registerSkillsSh) {
105
+ spinner.start("Registering on skills.sh…");
106
+ const reg = await registerOnSkillsSh(agents, { yes: options.yes });
107
+ if (reg.ok && !reg.skipped) spinner.stop("Registered on skills.sh");
108
+ else if (!reg.ok) {
109
+ spinner.stop("skills.sh registration skipped");
110
+ p.log.warn(reg.error);
111
+ } else spinner.stop("No skills CLI agents selected");
112
+ }
113
+
114
+ const paths = getMaestroPaths();
115
+ saveSetupConfig({
116
+ version: 1,
117
+ installedAt: new Date().toISOString(),
118
+ scope: project ? "project" : "global",
119
+ projectRoot: project ? cwd : null,
120
+ agents: installed,
121
+ maestroHome: paths.home,
122
+ });
123
+
124
+ p.note(
125
+ installed.map((i) => `${i.label}\n ${i.path}`).join("\n\n"),
126
+ "Installed paths",
127
+ );
128
+ p.outro("Maestro setup complete. Invoke with $maestro or /maestro in your agent.");
129
+ }
130
+
package/package.json CHANGED
@@ -1,35 +1,48 @@
1
- {
2
- "name": "maestro-skills",
3
- "version": "0.1.1",
4
- "description": "Interactive setup for the Maestro skill orchestrator (multi-agent)",
5
- "license": "MIT",
6
- "author": "Yuri Rodovalho",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/rodovalhofs/maestro.git"
10
- },
11
- "homepage": "https://github.com/rodovalhofs/maestro#installation",
12
- "bugs": {
13
- "url": "https://github.com/rodovalhofs/maestro/issues"
14
- },
15
- "type": "module",
16
- "engines": {
17
- "node": ">=18"
18
- },
19
- "bin": {
20
- "maestro-skills": "./packages/maestro-skills/bin/cli.js"
21
- },
22
- "scripts": {
23
- "prepare": "node scripts/sync-skill-to-cli.mjs",
24
- "test:py": "python -m unittest discover -s tests -v",
25
- "test:js": "npm test --prefix packages/maestro-skills",
26
- "test": "npm run test:py && npm run test:js",
27
- "publish:cli": "node scripts/sync-skill-to-cli.mjs && npm publish --prefix packages/maestro-skills --access public",
28
- "publish:scoped": "node scripts/sync-skill-to-cli.mjs && npm publish --prefix packages/rodovalhofs-maestro --access public"
29
- },
30
- "dependencies": {
31
- "@clack/prompts": "^0.10.1",
32
- "commander": "^13.1.0"
33
- },
34
- "private": false
35
- }
1
+ {
2
+ "name": "maestro-skills",
3
+ "version": "0.1.2",
4
+ "description": "Interactive setup for the Maestro skill orchestrator (multi-agent)",
5
+ "license": "MIT",
6
+ "author": "Yuri Rodovalho",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/rodovalhofs/maestro.git",
10
+ "directory": "packages/maestro-skills"
11
+ },
12
+ "homepage": "https://github.com/rodovalhofs/maestro#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/rodovalhofs/maestro/issues"
15
+ },
16
+ "keywords": [
17
+ "maestro",
18
+ "cursor",
19
+ "claude",
20
+ "codex",
21
+ "agent-skills",
22
+ "skills",
23
+ "orchestrator"
24
+ ],
25
+ "type": "module",
26
+ "engines": {
27
+ "node": ">=18"
28
+ },
29
+ "bin": {
30
+ "maestro-skills": "./bin/cli.js"
31
+ },
32
+ "files": [
33
+ "bin",
34
+ "lib",
35
+ "skill",
36
+ "agents.json",
37
+ "README.md"
38
+ ],
39
+ "scripts": {
40
+ "prepack": "node ../../scripts/sync-skill-to-cli.mjs",
41
+ "prepublishOnly": "node -e \"const fs=require('fs'); if(!fs.existsSync('skill/SKILL.md')){console.error('Missing skill/ — run sync-skill-to-cli'); process.exit(1)}\"",
42
+ "test": "node --test test/"
43
+ },
44
+ "dependencies": {
45
+ "@clack/prompts": "^0.10.1",
46
+ "commander": "^13.1.0"
47
+ }
48
+ }
@@ -1,26 +0,0 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- branches: [main]
6
- pull_request:
7
- branches: [main]
8
-
9
- jobs:
10
- test:
11
- name: Testes maestro
12
- runs-on: ubuntu-latest
13
- steps:
14
- - uses: actions/checkout@v4
15
- - uses: actions/setup-python@v5
16
- with:
17
- python-version: "3.12"
18
- - uses: actions/setup-node@v4
19
- with:
20
- node-version: "20"
21
- - run: node scripts/sync-skill-to-cli.mjs
22
- - run: python -m unittest discover -s tests -v
23
- - run: npm install
24
- working-directory: packages/maestro-skills
25
- - run: npm test
26
- working-directory: packages/maestro-skills
@@ -1,30 +0,0 @@
1
- name: Publish npm
2
-
3
- on:
4
- release:
5
- types: [published]
6
- workflow_dispatch:
7
-
8
- jobs:
9
- publish:
10
- runs-on: ubuntu-latest
11
- permissions:
12
- contents: read
13
- id-token: write
14
- steps:
15
- - uses: actions/checkout@v4
16
- - uses: actions/setup-node@v4
17
- with:
18
- node-version: "20"
19
- registry-url: "https://registry.npmjs.org"
20
- - run: node scripts/sync-skill-to-cli.mjs
21
- - run: npm ci
22
- working-directory: packages/maestro-skills
23
- - run: npm publish --access public
24
- working-directory: packages/maestro-skills
25
- env:
26
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
27
- - run: npm publish --access public
28
- working-directory: packages/rodovalhofs-maestro
29
- env:
30
- NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}