@neetru/cli 2.7.5 → 2.9.1
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 +316 -220
- package/README.md +137 -137
- package/dist/cli-kit/format.d.ts +49 -0
- package/dist/cli-kit/format.js +88 -0
- package/dist/cli-kit/format.js.map +1 -0
- package/dist/cli-kit/glyphs.d.ts +22 -0
- package/dist/cli-kit/glyphs.js +22 -0
- package/dist/cli-kit/glyphs.js.map +1 -0
- package/dist/cli-kit/index.d.ts +13 -0
- package/dist/cli-kit/index.js +12 -0
- package/dist/cli-kit/index.js.map +1 -0
- package/dist/cli-kit/palette.d.ts +10 -0
- package/dist/cli-kit/palette.js +36 -0
- package/dist/cli-kit/palette.js.map +1 -0
- package/dist/commands/ai.js +8 -8
- package/dist/commands/autocomplete.js +34 -34
- package/dist/commands/bug.d.ts +87 -0
- package/dist/commands/bug.js +419 -0
- package/dist/commands/bug.js.map +1 -0
- package/dist/commands/customers.d.ts +17 -0
- package/dist/commands/customers.js +160 -0
- package/dist/commands/customers.js.map +1 -0
- package/dist/commands/db.d.ts +91 -7
- package/dist/commands/db.js +898 -123
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/deploy.d.ts +5 -0
- package/dist/commands/deploy.js +68 -0
- package/dist/commands/deploy.js.map +1 -1
- package/dist/commands/dev.d.ts +68 -0
- package/dist/commands/dev.js +345 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/docs.d.ts +4 -0
- package/dist/commands/docs.js +99 -7
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/doctor.js +4 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/init.js +121 -121
- package/dist/commands/marketplace.d.ts +36 -0
- package/dist/commands/marketplace.js +584 -0
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/commands/new.d.ts +6 -0
- package/dist/commands/new.js +220 -40
- package/dist/commands/new.js.map +1 -1
- package/dist/commands/open.d.ts +8 -0
- package/dist/commands/open.js +61 -13
- package/dist/commands/open.js.map +1 -1
- package/dist/commands/products-db.d.ts +1 -1
- package/dist/commands/products-db.js +17 -4
- package/dist/commands/products-db.js.map +1 -1
- package/dist/commands/products.d.ts +23 -0
- package/dist/commands/products.js +39 -1
- package/dist/commands/products.js.map +1 -1
- package/dist/commands/tenants.js +15 -0
- package/dist/commands/tenants.js.map +1 -1
- package/dist/commands/ui.d.ts +1 -1
- package/dist/commands/ui.js +172 -2
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/workspaces.d.ts +10 -1
- package/dist/commands/workspaces.js +136 -22
- package/dist/commands/workspaces.js.map +1 -1
- package/dist/index.js +532 -44
- package/dist/index.js.map +1 -1
- package/dist/lib/ai/context.js +90 -90
- package/dist/lib/config-schema.d.ts +8 -8
- package/dist/lib/db-local/db-json.d.ts +63 -0
- package/dist/lib/db-local/db-json.js +189 -0
- package/dist/lib/db-local/db-json.js.map +1 -0
- package/dist/lib/db-local/env.d.ts +26 -0
- package/dist/lib/db-local/env.js +64 -0
- package/dist/lib/db-local/env.js.map +1 -0
- package/dist/lib/db-local/fingerprint.d.ts +8 -0
- package/dist/lib/db-local/fingerprint.js +28 -0
- package/dist/lib/db-local/fingerprint.js.map +1 -0
- package/dist/lib/db-local/index.d.ts +15 -0
- package/dist/lib/db-local/index.js +14 -0
- package/dist/lib/db-local/index.js.map +1 -0
- package/dist/lib/db-pipeline/build-deps.d.ts +14 -0
- package/dist/lib/db-pipeline/build-deps.js +158 -0
- package/dist/lib/db-pipeline/build-deps.js.map +1 -0
- package/dist/lib/db-pipeline/errors.d.ts +29 -0
- package/dist/lib/db-pipeline/errors.js +29 -0
- package/dist/lib/db-pipeline/errors.js.map +1 -0
- package/dist/lib/db-pipeline/index.d.ts +26 -0
- package/dist/lib/db-pipeline/index.js +25 -0
- package/dist/lib/db-pipeline/index.js.map +1 -0
- package/dist/lib/db-pipeline/pipeline.d.ts +13 -0
- package/dist/lib/db-pipeline/pipeline.js +119 -0
- package/dist/lib/db-pipeline/pipeline.js.map +1 -0
- package/dist/lib/db-pipeline/rehearse.d.ts +99 -0
- package/dist/lib/db-pipeline/rehearse.js +219 -0
- package/dist/lib/db-pipeline/rehearse.js.map +1 -0
- package/dist/lib/db-pipeline/types.d.ts +112 -0
- package/dist/lib/db-pipeline/types.js +20 -0
- package/dist/lib/db-pipeline/types.js.map +1 -0
- package/dist/lib/pickers.d.ts +12 -0
- package/dist/lib/pickers.js +34 -0
- package/dist/lib/pickers.js.map +1 -1
- package/package.json +66 -62
- package/templates/auth/callback.ts +22 -22
- package/templates/auth/sign-in.tsx +41 -41
- package/templates/billing/checkout.ts +22 -22
- package/templates/billing/page.tsx +43 -43
- package/templates/support/ticket-form.tsx +68 -68
- package/templates/usage/track.ts +30 -30
- package/templates/users/profile.tsx +43 -43
|
@@ -0,0 +1,584 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `neetru marketplace` — central de artefatos do ecossistema Neetru.
|
|
3
|
+
*
|
|
4
|
+
* Dois grupos principais:
|
|
5
|
+
* skills — instalar/atualizar/listar/remover Skills do Claude Code
|
|
6
|
+
* sdk — adicionar @neetru/sdk ao projeto atual ou bootstrapar novo
|
|
7
|
+
* browse — abre https://github.com/Neetru/neetru-libs no browser
|
|
8
|
+
*
|
|
9
|
+
* Fonte canônica de skills: https://github.com/Neetru/neetru-libs
|
|
10
|
+
* Cache local: ~/.neetru/marketplace-cache/
|
|
11
|
+
* Destino das skills: ~/.claude/skills/<nome-da-skill>/
|
|
12
|
+
*
|
|
13
|
+
* Decisão de design (Windows): symlinks requerem privilégio de admin
|
|
14
|
+
* ou Developer Mode habilitado. O comando usa cópia recursiva por
|
|
15
|
+
* default no Windows — sem surpresa pra quem não tem Developer Mode.
|
|
16
|
+
* Se NEETRU_MARKETPLACE_SYMLINK=1, tenta symlink mesmo no Windows.
|
|
17
|
+
*/
|
|
18
|
+
import * as fs from 'node:fs';
|
|
19
|
+
import * as fsp from 'node:fs/promises';
|
|
20
|
+
import * as path from 'node:path';
|
|
21
|
+
import * as os from 'node:os';
|
|
22
|
+
import { spawnSync } from 'node:child_process';
|
|
23
|
+
import chalk from 'chalk';
|
|
24
|
+
import ora from 'ora';
|
|
25
|
+
import inquirer from 'inquirer';
|
|
26
|
+
import { log } from '../utils/logger.js';
|
|
27
|
+
// ─── constantes ────────────────────────────────────────────────────────────────
|
|
28
|
+
const LIBS_REPO_URL = 'https://github.com/Neetru/neetru-libs.git';
|
|
29
|
+
const LIBS_REPO_HTTPS = 'https://github.com/Neetru/neetru-libs';
|
|
30
|
+
const SDK_PACKAGE = '@neetru/sdk';
|
|
31
|
+
const SDK_VERSION = '^2.1.0';
|
|
32
|
+
export function getCacheDir() {
|
|
33
|
+
return path.join(os.homedir(), '.neetru', 'marketplace-cache');
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve o diretorio fonte das skills no cache local.
|
|
37
|
+
*
|
|
38
|
+
* Suporta 2 estruturas no repo neetru-libs/claude-skills/:
|
|
39
|
+
*
|
|
40
|
+
* 1. Marketplace estruturado (atual): plugins/PLUGIN/skills/SKILL/SKILL.md
|
|
41
|
+
* - descobre todos os plugins/PLUGIN/skills/ e retorna o primeiro.
|
|
42
|
+
* 2. Plugin direto (legado): skills/SKILL/SKILL.md
|
|
43
|
+
* - retorna single path.
|
|
44
|
+
*
|
|
45
|
+
* Pra simplicidade, esta funcao devolve UMA root virtual:
|
|
46
|
+
* - Se existir claude-skills/plugins/PLUGIN/skills/, retorna a primeira (assume 1 plugin).
|
|
47
|
+
* - Senao, fallback pra claude-skills/skills/ (estrutura legada).
|
|
48
|
+
*/
|
|
49
|
+
export function getSkillsSourceDir() {
|
|
50
|
+
const claudeSkillsRoot = path.join(getCacheDir(), 'claude-skills');
|
|
51
|
+
const pluginsRoot = path.join(claudeSkillsRoot, 'plugins');
|
|
52
|
+
// Tenta marketplace estruturado primeiro
|
|
53
|
+
try {
|
|
54
|
+
const pluginDirs = fs.readdirSync(pluginsRoot, { withFileTypes: true })
|
|
55
|
+
.filter((e) => e.isDirectory())
|
|
56
|
+
.map((e) => path.join(pluginsRoot, e.name, 'skills'))
|
|
57
|
+
.filter((p) => fs.existsSync(p));
|
|
58
|
+
if (pluginDirs.length > 0) {
|
|
59
|
+
// Retorna o primeiro plugin's skills dir (no estado atual: só 1 plugin "neetru")
|
|
60
|
+
// Futuramente: expandir pra agregar de múltiplos plugins se houver demanda.
|
|
61
|
+
return pluginDirs[0];
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// pluginsRoot não existe — cai pro fallback
|
|
66
|
+
}
|
|
67
|
+
return path.join(claudeSkillsRoot, 'skills');
|
|
68
|
+
}
|
|
69
|
+
export function getClaudeSkillsDir() {
|
|
70
|
+
return path.join(os.homedir(), '.claude', 'skills');
|
|
71
|
+
}
|
|
72
|
+
function isWindows() {
|
|
73
|
+
return process.platform === 'win32';
|
|
74
|
+
}
|
|
75
|
+
// ─── helpers de filesystem ─────────────────────────────────────────────────────
|
|
76
|
+
async function ensureDir(dir) {
|
|
77
|
+
await fsp.mkdir(dir, { recursive: true });
|
|
78
|
+
}
|
|
79
|
+
async function dirExists(p) {
|
|
80
|
+
try {
|
|
81
|
+
const stat = await fsp.stat(p);
|
|
82
|
+
return stat.isDirectory();
|
|
83
|
+
}
|
|
84
|
+
catch {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
async function pathExists(p) {
|
|
89
|
+
try {
|
|
90
|
+
await fsp.access(p);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
/** Cópia recursiva pura em Node (sem dependência extra). */
|
|
98
|
+
async function copyDirRecursive(src, dest) {
|
|
99
|
+
await ensureDir(dest);
|
|
100
|
+
const entries = await fsp.readdir(src, { withFileTypes: true });
|
|
101
|
+
for (const entry of entries) {
|
|
102
|
+
const srcPath = path.join(src, entry.name);
|
|
103
|
+
const destPath = path.join(dest, entry.name);
|
|
104
|
+
if (entry.isDirectory()) {
|
|
105
|
+
await copyDirRecursive(srcPath, destPath);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
await fsp.copyFile(srcPath, destPath);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
async function removeDir(p) {
|
|
113
|
+
await fsp.rm(p, { recursive: true, force: true });
|
|
114
|
+
}
|
|
115
|
+
// ─── git helpers (spawnSync — sem shell injection) ─────────────────────────────
|
|
116
|
+
function gitAvailable() {
|
|
117
|
+
const r = spawnSync('git', ['--version'], { stdio: 'ignore' });
|
|
118
|
+
return r.status === 0;
|
|
119
|
+
}
|
|
120
|
+
function gitClone(dest) {
|
|
121
|
+
const r = spawnSync('git', ['clone', '--depth', '1', LIBS_REPO_URL, dest], {
|
|
122
|
+
encoding: 'utf8',
|
|
123
|
+
});
|
|
124
|
+
return { ok: r.status === 0, stderr: r.stderr ?? '' };
|
|
125
|
+
}
|
|
126
|
+
function gitPull(dir) {
|
|
127
|
+
const r = spawnSync('git', ['pull', '--ff-only'], {
|
|
128
|
+
cwd: dir,
|
|
129
|
+
encoding: 'utf8',
|
|
130
|
+
});
|
|
131
|
+
return { ok: r.status === 0, stderr: r.stderr ?? '' };
|
|
132
|
+
}
|
|
133
|
+
// ─── symlink vs cópia ──────────────────────────────────────────────────────────
|
|
134
|
+
/**
|
|
135
|
+
* true se deve tentar symlink.
|
|
136
|
+
* Linux/macOS: sim por default.
|
|
137
|
+
* Windows: só com NEETRU_MARKETPLACE_SYMLINK=1 (requer Developer Mode ou admin).
|
|
138
|
+
*/
|
|
139
|
+
function useSymlink() {
|
|
140
|
+
if (process.env.NEETRU_MARKETPLACE_SYMLINK === '1')
|
|
141
|
+
return true;
|
|
142
|
+
return !isWindows();
|
|
143
|
+
}
|
|
144
|
+
async function linkOrCopy(src, dest) {
|
|
145
|
+
if (useSymlink()) {
|
|
146
|
+
try {
|
|
147
|
+
await fsp.symlink(src, dest, 'dir');
|
|
148
|
+
return 'symlink';
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
// fallback pra cópia (sem acesso pra symlink)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
await copyDirRecursive(src, dest);
|
|
155
|
+
return 'copy';
|
|
156
|
+
}
|
|
157
|
+
async function parseSkillMd(skillMdPath) {
|
|
158
|
+
try {
|
|
159
|
+
const raw = await fsp.readFile(skillMdPath, 'utf8');
|
|
160
|
+
// Primeira linha de parágrafo após o heading
|
|
161
|
+
const descMatch = raw.match(/^#{1,3}\s+.+\n+([^#\n].+)/m);
|
|
162
|
+
const versionMatch = raw.match(/version[:\s]+([0-9]+\.[0-9]+\.[0-9]+[\w.-]*)/i);
|
|
163
|
+
return {
|
|
164
|
+
description: descMatch?.[1]?.slice(0, 80).trim() ?? '(sem descrição)',
|
|
165
|
+
version: versionMatch?.[1] ?? '—',
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
catch {
|
|
169
|
+
return { description: '(SKILL.md ilegível)', version: '—' };
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export async function listAvailableSkills() {
|
|
173
|
+
const sourceDir = getSkillsSourceDir();
|
|
174
|
+
const claudeDir = getClaudeSkillsDir();
|
|
175
|
+
if (!(await dirExists(sourceDir)))
|
|
176
|
+
return [];
|
|
177
|
+
const entries = await fsp.readdir(sourceDir, { withFileTypes: true });
|
|
178
|
+
const skills = [];
|
|
179
|
+
for (const entry of entries) {
|
|
180
|
+
if (!entry.isDirectory())
|
|
181
|
+
continue;
|
|
182
|
+
const skillMdPath = path.join(sourceDir, entry.name, 'SKILL.md');
|
|
183
|
+
const { description, version } = await parseSkillMd(skillMdPath);
|
|
184
|
+
const installed = await pathExists(path.join(claudeDir, entry.name));
|
|
185
|
+
skills.push({ name: entry.name, description, version, installed });
|
|
186
|
+
}
|
|
187
|
+
return skills;
|
|
188
|
+
}
|
|
189
|
+
// ─── neetru marketplace skills install ─────────────────────────────────────────
|
|
190
|
+
export async function runSkillsInstall() {
|
|
191
|
+
if (!gitAvailable()) {
|
|
192
|
+
log.error('git não encontrado. Instale o git e tente novamente.');
|
|
193
|
+
log.dim(' → https://git-scm.com/downloads');
|
|
194
|
+
process.exit(1);
|
|
195
|
+
}
|
|
196
|
+
const cacheDir = getCacheDir();
|
|
197
|
+
const claudeDir = getClaudeSkillsDir();
|
|
198
|
+
const spinner = ora({ text: 'Verificando cache local…', color: 'cyan' }).start();
|
|
199
|
+
await ensureDir(cacheDir);
|
|
200
|
+
await ensureDir(claudeDir);
|
|
201
|
+
const isFirstRun = !(await dirExists(path.join(cacheDir, '.git')));
|
|
202
|
+
if (isFirstRun) {
|
|
203
|
+
spinner.text = `Clonando ${LIBS_REPO_URL}…`;
|
|
204
|
+
const { ok, stderr } = gitClone(cacheDir);
|
|
205
|
+
if (!ok) {
|
|
206
|
+
spinner.fail('Falha ao clonar repositório.');
|
|
207
|
+
log.error(stderr.trim() || 'Verifique sua conexão e acesso ao GitHub.');
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
else {
|
|
212
|
+
spinner.text = 'Sincronizando cache (git pull)…';
|
|
213
|
+
const { ok, stderr } = gitPull(cacheDir);
|
|
214
|
+
if (!ok) {
|
|
215
|
+
spinner.warn(`Aviso no git pull: ${stderr.trim().split('\n')[0]}`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
spinner.succeed('Cache sincronizado.');
|
|
219
|
+
const skills = await listAvailableSkills();
|
|
220
|
+
if (skills.length === 0) {
|
|
221
|
+
log.warn('Nenhuma skill encontrada no cache.');
|
|
222
|
+
log.dim(' Estrutura esperada: claude-skills/plugins/<plugin>/skills/<skill>/SKILL.md');
|
|
223
|
+
log.dim(' (ou estrutura legada: claude-skills/skills/<skill>/SKILL.md)');
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
console.log();
|
|
227
|
+
log.heading('Instalando skills');
|
|
228
|
+
let installed = 0;
|
|
229
|
+
let updated = 0;
|
|
230
|
+
let skipped = 0;
|
|
231
|
+
for (const skill of skills) {
|
|
232
|
+
const srcPath = path.join(getSkillsSourceDir(), skill.name);
|
|
233
|
+
const destPath = path.join(claudeDir, skill.name);
|
|
234
|
+
if (skill.installed) {
|
|
235
|
+
const isLink = fs.existsSync(destPath) && fs.lstatSync(destPath).isSymbolicLink();
|
|
236
|
+
if (isLink) {
|
|
237
|
+
console.log(` ${chalk.dim('─')} ${chalk.bold(skill.name)} — symlink ativo`);
|
|
238
|
+
skipped++;
|
|
239
|
+
}
|
|
240
|
+
else {
|
|
241
|
+
// Cópia existente → re-copia pra atualizar
|
|
242
|
+
await removeDir(destPath);
|
|
243
|
+
await copyDirRecursive(srcPath, destPath);
|
|
244
|
+
console.log(` ${chalk.yellow('↑')} ${chalk.bold(skill.name)} — atualizado`);
|
|
245
|
+
updated++;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
const mode = await linkOrCopy(srcPath, destPath);
|
|
250
|
+
const modeLabel = mode === 'symlink' ? chalk.dim('symlink') : chalk.dim('cópia');
|
|
251
|
+
console.log(` ${chalk.green('✓')} ${chalk.bold(skill.name)} — instalado (${modeLabel})`);
|
|
252
|
+
console.log(` ${chalk.dim('→')} ${chalk.dim(destPath)}`);
|
|
253
|
+
installed++;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
console.log();
|
|
257
|
+
const parts = [];
|
|
258
|
+
if (installed > 0)
|
|
259
|
+
parts.push(`${installed} nova(s)`);
|
|
260
|
+
if (updated > 0)
|
|
261
|
+
parts.push(`${updated} atualizada(s)`);
|
|
262
|
+
if (skipped > 0)
|
|
263
|
+
parts.push(`${skipped} sem alteração`);
|
|
264
|
+
log.success(parts.join(', ') + '.');
|
|
265
|
+
log.dim(' Reinicie o Claude Code para carregar as skills.');
|
|
266
|
+
}
|
|
267
|
+
// ─── neetru marketplace skills update ──────────────────────────────────────────
|
|
268
|
+
export async function runSkillsUpdate() {
|
|
269
|
+
const cacheDir = getCacheDir();
|
|
270
|
+
const hasCache = await dirExists(path.join(cacheDir, '.git'));
|
|
271
|
+
if (!hasCache) {
|
|
272
|
+
log.warn('Cache não encontrado. Rodando install completo…');
|
|
273
|
+
await runSkillsInstall();
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const spinner = ora({ text: 'Atualizando neetru-libs (git pull)…', color: 'cyan' }).start();
|
|
277
|
+
const { ok, stderr } = gitPull(cacheDir);
|
|
278
|
+
if (!ok) {
|
|
279
|
+
spinner.fail('Falha ao atualizar cache.');
|
|
280
|
+
log.error(stderr.trim() || 'Verifique sua conexão.');
|
|
281
|
+
process.exit(1);
|
|
282
|
+
}
|
|
283
|
+
spinner.succeed('Repositório atualizado.');
|
|
284
|
+
// Re-copia skills instaladas como cópia (symlinks já apontam pro cache atualizado)
|
|
285
|
+
const claudeDir = getClaudeSkillsDir();
|
|
286
|
+
const skills = await listAvailableSkills();
|
|
287
|
+
let recoped = 0;
|
|
288
|
+
for (const skill of skills) {
|
|
289
|
+
if (!skill.installed)
|
|
290
|
+
continue;
|
|
291
|
+
const destPath = path.join(claudeDir, skill.name);
|
|
292
|
+
const isLink = fs.existsSync(destPath) && fs.lstatSync(destPath).isSymbolicLink();
|
|
293
|
+
if (isLink)
|
|
294
|
+
continue; // symlink aponta pro cache — já atualizado pelo git pull
|
|
295
|
+
const srcPath = path.join(getSkillsSourceDir(), skill.name);
|
|
296
|
+
await removeDir(destPath);
|
|
297
|
+
await copyDirRecursive(srcPath, destPath);
|
|
298
|
+
console.log(` ${chalk.yellow('↑')} ${chalk.bold(skill.name)} — re-copiado`);
|
|
299
|
+
recoped++;
|
|
300
|
+
}
|
|
301
|
+
if (recoped === 0) {
|
|
302
|
+
log.success('Skills atualizadas via cache (symlinks).');
|
|
303
|
+
}
|
|
304
|
+
else {
|
|
305
|
+
log.success(`${recoped} skill(s) re-copiada(s).`);
|
|
306
|
+
}
|
|
307
|
+
log.dim(' Reinicie o Claude Code se novas skills foram adicionadas.');
|
|
308
|
+
}
|
|
309
|
+
// ─── neetru marketplace skills list ────────────────────────────────────────────
|
|
310
|
+
export async function runSkillsList() {
|
|
311
|
+
const hasCache = await dirExists(getSkillsSourceDir());
|
|
312
|
+
if (!hasCache) {
|
|
313
|
+
log.warn('Sem cache local. Rode: neetru marketplace skills install');
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const skills = await listAvailableSkills();
|
|
317
|
+
if (skills.length === 0) {
|
|
318
|
+
log.warn('Nenhuma skill encontrada no cache.');
|
|
319
|
+
return;
|
|
320
|
+
}
|
|
321
|
+
console.log();
|
|
322
|
+
log.heading('Skills do ecossistema Neetru');
|
|
323
|
+
console.log();
|
|
324
|
+
const col1 = Math.max(6, ...skills.map((s) => s.name.length)) + 2;
|
|
325
|
+
const col2 = Math.max(7, ...skills.map((s) => s.version.length)) + 2;
|
|
326
|
+
console.log(` ${chalk.dim('NOME'.padEnd(col1))}${chalk.dim('VERSÃO'.padEnd(col2))}${chalk.dim('STATUS'.padEnd(13))}${chalk.dim('DESCRIÇÃO')}`);
|
|
327
|
+
console.log(` ${chalk.dim('─'.repeat(col1 + col2 + 40))}`);
|
|
328
|
+
for (const skill of skills) {
|
|
329
|
+
const statusLabel = skill.installed ? chalk.green('instalada') : chalk.dim('disponível');
|
|
330
|
+
const name = chalk.bold(skill.name.padEnd(col1));
|
|
331
|
+
const version = chalk.dim(skill.version.padEnd(col2));
|
|
332
|
+
const desc = chalk.dim(skill.description);
|
|
333
|
+
console.log(` ${name}${version}${statusLabel.padEnd(13)} ${desc}`);
|
|
334
|
+
}
|
|
335
|
+
console.log();
|
|
336
|
+
}
|
|
337
|
+
// ─── neetru marketplace skills uninstall ───────────────────────────────────────
|
|
338
|
+
export async function runSkillsUninstall(opts = {}) {
|
|
339
|
+
const claudeDir = getClaudeSkillsDir();
|
|
340
|
+
const skills = await listAvailableSkills();
|
|
341
|
+
const installed = skills.filter((s) => s.installed);
|
|
342
|
+
if (installed.length === 0) {
|
|
343
|
+
log.info('Nenhuma skill Neetru instalada.');
|
|
344
|
+
return;
|
|
345
|
+
}
|
|
346
|
+
console.log();
|
|
347
|
+
log.heading('Skills a remover');
|
|
348
|
+
for (const s of installed) {
|
|
349
|
+
console.log(` ${chalk.red('·')} ${chalk.bold(s.name)}`);
|
|
350
|
+
console.log(` ${chalk.dim(path.join(claudeDir, s.name))}`);
|
|
351
|
+
}
|
|
352
|
+
console.log();
|
|
353
|
+
if (!opts.yes) {
|
|
354
|
+
const { confirm } = await inquirer.prompt([
|
|
355
|
+
{
|
|
356
|
+
type: 'confirm',
|
|
357
|
+
name: 'confirm',
|
|
358
|
+
message: `Remover ${installed.length} skill(s) de ${chalk.dim('~/.claude/skills/')}?`,
|
|
359
|
+
default: false,
|
|
360
|
+
},
|
|
361
|
+
]);
|
|
362
|
+
if (!confirm) {
|
|
363
|
+
log.dim('Operação cancelada.');
|
|
364
|
+
return;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
for (const skill of installed) {
|
|
368
|
+
const destPath = path.join(claudeDir, skill.name);
|
|
369
|
+
await removeDir(destPath);
|
|
370
|
+
console.log(` ${chalk.red('✗')} ${chalk.bold(skill.name)} removido`);
|
|
371
|
+
}
|
|
372
|
+
console.log();
|
|
373
|
+
log.success('Skills removidas. Reinicie o Claude Code.');
|
|
374
|
+
}
|
|
375
|
+
// ─── neetru marketplace sdk init ───────────────────────────────────────────────
|
|
376
|
+
export async function runSdkInit() {
|
|
377
|
+
const cwd = process.cwd();
|
|
378
|
+
const pkgJsonPath = path.join(cwd, 'package.json');
|
|
379
|
+
const hasPkgJson = await pathExists(pkgJsonPath);
|
|
380
|
+
if (!hasPkgJson) {
|
|
381
|
+
log.warn('Nenhum package.json no diretório atual.');
|
|
382
|
+
const { create } = await inquirer.prompt([
|
|
383
|
+
{
|
|
384
|
+
type: 'confirm',
|
|
385
|
+
name: 'create',
|
|
386
|
+
message: 'Criar package.json básico aqui?',
|
|
387
|
+
default: true,
|
|
388
|
+
},
|
|
389
|
+
]);
|
|
390
|
+
if (!create) {
|
|
391
|
+
log.dim('Cancellado. Navegue pro diretório do projeto primeiro.');
|
|
392
|
+
return;
|
|
393
|
+
}
|
|
394
|
+
const pkgContent = JSON.stringify({
|
|
395
|
+
name: path.basename(cwd).toLowerCase().replace(/[^a-z0-9-]/g, '-'),
|
|
396
|
+
version: '0.1.0',
|
|
397
|
+
type: 'module',
|
|
398
|
+
scripts: { dev: 'tsx src/index.ts' },
|
|
399
|
+
dependencies: {},
|
|
400
|
+
}, null, 2);
|
|
401
|
+
await fsp.writeFile(pkgJsonPath, pkgContent, 'utf8');
|
|
402
|
+
log.success('package.json criado.');
|
|
403
|
+
}
|
|
404
|
+
// Verifica se SDK já está presente
|
|
405
|
+
const pkgRaw = await fsp.readFile(pkgJsonPath, 'utf8');
|
|
406
|
+
const pkg = JSON.parse(pkgRaw);
|
|
407
|
+
const alreadyInstalled = pkg.dependencies?.[SDK_PACKAGE] ?? pkg.devDependencies?.[SDK_PACKAGE];
|
|
408
|
+
if (alreadyInstalled) {
|
|
409
|
+
log.info(`${SDK_PACKAGE} já presente: ${chalk.cyan(alreadyInstalled)}`);
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
const spinner = ora({ text: `Instalando ${SDK_PACKAGE}@${SDK_VERSION}…`, color: 'cyan' }).start();
|
|
413
|
+
const r = spawnSync('npm', ['install', `${SDK_PACKAGE}@${SDK_VERSION}`], {
|
|
414
|
+
cwd,
|
|
415
|
+
encoding: 'utf8',
|
|
416
|
+
});
|
|
417
|
+
if (r.status !== 0) {
|
|
418
|
+
spinner.fail('Falha ao instalar @neetru/sdk.');
|
|
419
|
+
log.error((r.stderr ?? '').trim() || 'Verifique sua conexão com o npm.');
|
|
420
|
+
process.exit(1);
|
|
421
|
+
}
|
|
422
|
+
spinner.succeed(`${SDK_PACKAGE}@${SDK_VERSION} instalado.`);
|
|
423
|
+
}
|
|
424
|
+
// Cria boilerplate src/neetru.ts
|
|
425
|
+
const srcDir = path.join(cwd, 'src');
|
|
426
|
+
await ensureDir(srcDir);
|
|
427
|
+
const boilerplatePath = path.join(srcDir, 'neetru.ts');
|
|
428
|
+
const exists = await pathExists(boilerplatePath);
|
|
429
|
+
if (!exists) {
|
|
430
|
+
const boilerplate = [
|
|
431
|
+
'/**',
|
|
432
|
+
' * neetru.ts — ponto de entrada do @neetru/sdk.',
|
|
433
|
+
' *',
|
|
434
|
+
' * Gerado por: neetru marketplace sdk init',
|
|
435
|
+
' *',
|
|
436
|
+
" * Substitua os valores pelas suas variáveis de ambiente.",
|
|
437
|
+
" * Em modo dev (NEETRU_ENV=dev) o SDK usa mocks in-memory automaticamente.",
|
|
438
|
+
' */',
|
|
439
|
+
"import { createNeetruClient } from '@neetru/sdk';",
|
|
440
|
+
'',
|
|
441
|
+
'export const neetru = createNeetruClient({',
|
|
442
|
+
" apiKey: process.env.NEETRU_API_KEY ?? '',",
|
|
443
|
+
" env: (process.env.NEETRU_ENV as 'dev' | 'prod') ?? 'dev',",
|
|
444
|
+
'});',
|
|
445
|
+
'',
|
|
446
|
+
'// Exemplos de uso:',
|
|
447
|
+
'//',
|
|
448
|
+
'// const user = await neetru.auth.signIn({ email, password });',
|
|
449
|
+
'// const catalog = await neetru.catalog.list();',
|
|
450
|
+
'// const ok = await neetru.entitlements.check({ tenantId, feature: \'export\' });',
|
|
451
|
+
'// await neetru.telemetry.track({ event: \'user.signed_in\', tenantId });',
|
|
452
|
+
'',
|
|
453
|
+
].join('\n');
|
|
454
|
+
await fsp.writeFile(boilerplatePath, boilerplate, 'utf8');
|
|
455
|
+
log.success(`Boilerplate criado: ${chalk.cyan('src/neetru.ts')}`);
|
|
456
|
+
}
|
|
457
|
+
else {
|
|
458
|
+
log.info('src/neetru.ts já existe — não sobrescrito.');
|
|
459
|
+
}
|
|
460
|
+
console.log();
|
|
461
|
+
log.heading('Próximos passos');
|
|
462
|
+
console.log(` ${chalk.dim('1.')} Adicione ao .env.local:`);
|
|
463
|
+
console.log(` ${chalk.cyan('NEETRU_API_KEY=nrt_<keyId>_<secret>')}`);
|
|
464
|
+
console.log(` ${chalk.cyan('NEETRU_ENV=dev')}`);
|
|
465
|
+
console.log(` ${chalk.dim('2.')} Importe onde precisar:`);
|
|
466
|
+
console.log(` ${chalk.cyan("import { neetru } from './src/neetru'")}`);
|
|
467
|
+
console.log(` ${chalk.dim('3.')} Docs: ${chalk.cyan('https://github.com/Neetru/neetru-sdk')}`);
|
|
468
|
+
console.log();
|
|
469
|
+
}
|
|
470
|
+
// ─── neetru marketplace sdk templates ──────────────────────────────────────────
|
|
471
|
+
export async function runSdkTemplates() {
|
|
472
|
+
const { fileURLToPath } = await import('node:url');
|
|
473
|
+
const { dirname, resolve } = await import('node:path');
|
|
474
|
+
const __fname = fileURLToPath(import.meta.url);
|
|
475
|
+
const __dir = dirname(__fname);
|
|
476
|
+
// Em dev (tsx): src/commands/ → ../templates
|
|
477
|
+
// Em prod (dist/): dist/commands/ → ../templates (não existe ali) → ../templates
|
|
478
|
+
const templatesDir = resolve(__dir, '..', 'templates');
|
|
479
|
+
const hasTemplates = await dirExists(templatesDir);
|
|
480
|
+
if (!hasTemplates) {
|
|
481
|
+
log.warn(`Diretório de templates não encontrado em: ${templatesDir}`);
|
|
482
|
+
return;
|
|
483
|
+
}
|
|
484
|
+
const entries = await fsp.readdir(templatesDir, { withFileTypes: true });
|
|
485
|
+
const templates = entries.filter((e) => e.isDirectory()).map((e) => e.name);
|
|
486
|
+
if (templates.length === 0) {
|
|
487
|
+
log.warn('Nenhum template disponível.');
|
|
488
|
+
return;
|
|
489
|
+
}
|
|
490
|
+
console.log();
|
|
491
|
+
log.heading('Templates SDK disponíveis');
|
|
492
|
+
for (const tmpl of templates) {
|
|
493
|
+
console.log(` ${chalk.cyan('·')} ${chalk.bold(tmpl)}`);
|
|
494
|
+
console.log(` ${chalk.dim(`neetru marketplace sdk add ${tmpl}`)}`);
|
|
495
|
+
}
|
|
496
|
+
console.log();
|
|
497
|
+
}
|
|
498
|
+
// ─── neetru marketplace sdk add <template> ─────────────────────────────────────
|
|
499
|
+
/**
|
|
500
|
+
* HIGH-4: templates permitidos são os que existem no diretório canônico.
|
|
501
|
+
* Lista estática reflete o conteúdo de /templates — atualizar quando novos
|
|
502
|
+
* templates forem adicionados ao pacote.
|
|
503
|
+
*/
|
|
504
|
+
const ALLOWED_SDK_TEMPLATES = ['auth', 'billing', 'support', 'usage', 'users'];
|
|
505
|
+
export async function runSdkAddTemplate(template, opts = {}) {
|
|
506
|
+
// HIGH-4: rejeita nomes fora da whitelist antes de resolver qualquer path.
|
|
507
|
+
// Impede path traversal (ex: "../../etc/passwd") e templates não-canônicos.
|
|
508
|
+
if (!ALLOWED_SDK_TEMPLATES.includes(template)) {
|
|
509
|
+
log.error(`Template "${template}" não reconhecido.`);
|
|
510
|
+
log.dim(` Disponíveis: ${ALLOWED_SDK_TEMPLATES.join(', ')}`);
|
|
511
|
+
process.exit(1);
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
const { fileURLToPath } = await import('node:url');
|
|
515
|
+
const { dirname, resolve, sep } = await import('node:path');
|
|
516
|
+
const __fname = fileURLToPath(import.meta.url);
|
|
517
|
+
const __dir = dirname(__fname);
|
|
518
|
+
const templatesDir = resolve(__dir, '..', 'templates');
|
|
519
|
+
// Defesa em profundidade: mesmo com whitelist, verifica que o path resolvido
|
|
520
|
+
// fica dentro de templatesDir (não pode sair por symlink ou encoding estranho).
|
|
521
|
+
const srcTemplate = resolve(templatesDir, template);
|
|
522
|
+
if (!srcTemplate.startsWith(resolve(templatesDir) + sep)) {
|
|
523
|
+
log.error('Caminho do template inválido.');
|
|
524
|
+
process.exit(1);
|
|
525
|
+
return;
|
|
526
|
+
}
|
|
527
|
+
if (!(await dirExists(srcTemplate))) {
|
|
528
|
+
log.error(`Template "${template}" não encontrado.`);
|
|
529
|
+
log.dim(' → Templates disponíveis: neetru marketplace sdk templates');
|
|
530
|
+
process.exit(1);
|
|
531
|
+
}
|
|
532
|
+
const cwd = process.cwd();
|
|
533
|
+
const destDir = path.join(cwd, 'src');
|
|
534
|
+
await ensureDir(destDir);
|
|
535
|
+
const entries = await fsp.readdir(srcTemplate, { withFileTypes: true });
|
|
536
|
+
let copied = 0;
|
|
537
|
+
for (const entry of entries) {
|
|
538
|
+
if (!entry.isFile())
|
|
539
|
+
continue;
|
|
540
|
+
const destPath = path.join(destDir, entry.name);
|
|
541
|
+
if (!opts.force && (await pathExists(destPath))) {
|
|
542
|
+
log.warn(`${entry.name} já existe — pulado (use --force para sobrescrever).`);
|
|
543
|
+
continue;
|
|
544
|
+
}
|
|
545
|
+
await fsp.copyFile(path.join(srcTemplate, entry.name), destPath);
|
|
546
|
+
console.log(` ${chalk.green('✓')} src/${entry.name}`);
|
|
547
|
+
copied++;
|
|
548
|
+
}
|
|
549
|
+
if (copied > 0) {
|
|
550
|
+
log.success(`Template "${template}" adicionado ao projeto.`);
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
log.info('Nenhum arquivo novo copiado (todos já existiam).');
|
|
554
|
+
}
|
|
555
|
+
}
|
|
556
|
+
// ─── neetru marketplace browse ─────────────────────────────────────────────────
|
|
557
|
+
export async function runMarketplaceBrowse() {
|
|
558
|
+
const opener = resolveOpener();
|
|
559
|
+
if (!opener) {
|
|
560
|
+
log.info(`Acesse manualmente: ${chalk.cyan(LIBS_REPO_HTTPS)}`);
|
|
561
|
+
return;
|
|
562
|
+
}
|
|
563
|
+
const spinner = ora({ text: 'Abrindo browser…', color: 'cyan' }).start();
|
|
564
|
+
const r = spawnSync(opener, [LIBS_REPO_HTTPS], { stdio: 'ignore' });
|
|
565
|
+
if (r.status === 0 || r.status === null) {
|
|
566
|
+
spinner.succeed(`Aberto: ${chalk.cyan(LIBS_REPO_HTTPS)}`);
|
|
567
|
+
}
|
|
568
|
+
else {
|
|
569
|
+
spinner.stop();
|
|
570
|
+
log.info(`Acesse: ${chalk.cyan(LIBS_REPO_HTTPS)}`);
|
|
571
|
+
}
|
|
572
|
+
}
|
|
573
|
+
function resolveOpener() {
|
|
574
|
+
if (isWindows())
|
|
575
|
+
return 'explorer';
|
|
576
|
+
if (process.platform === 'darwin')
|
|
577
|
+
return 'open';
|
|
578
|
+
// Linux
|
|
579
|
+
const r = spawnSync('which', ['xdg-open'], { encoding: 'utf8', stdio: 'pipe' });
|
|
580
|
+
if (r.status === 0)
|
|
581
|
+
return 'xdg-open';
|
|
582
|
+
return null;
|
|
583
|
+
}
|
|
584
|
+
//# sourceMappingURL=marketplace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"marketplace.js","sourceRoot":"","sources":["../../src/commands/marketplace.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/new.d.ts
CHANGED
|
@@ -7,6 +7,12 @@ export interface NewMacroOptions {
|
|
|
7
7
|
skipInit?: boolean;
|
|
8
8
|
/** Pula a abertura do browser (útil em CI). */
|
|
9
9
|
skipOpen?: boolean;
|
|
10
|
+
/**
|
|
11
|
+
* GAP-X-6: pula o 5º passo de inicialização do banco de dados.
|
|
12
|
+
* Útil quando o produto não precisa de banco ou quando o dev prefere
|
|
13
|
+
* rodar `neetru db init` manualmente depois.
|
|
14
|
+
*/
|
|
15
|
+
skipDbInit?: boolean;
|
|
10
16
|
json?: boolean;
|
|
11
17
|
}
|
|
12
18
|
export declare function runNewMacro(name: string, opts?: NewMacroOptions): Promise<void>;
|