@noclaf/cli 0.4.13 → 0.4.15
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/dist/auth.js +2 -1
- package/dist/auth.js.map +1 -1
- package/dist/brand.js +82 -0
- package/dist/brand.js.map +1 -0
- package/dist/cli/commands/auth.js +91 -58
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/init/auth-step.js +48 -0
- package/dist/cli/commands/init/auth-step.js.map +1 -0
- package/dist/cli/commands/init/clients-step.js +76 -0
- package/dist/cli/commands/init/clients-step.js.map +1 -0
- package/dist/cli/commands/init/context-step.js +66 -0
- package/dist/cli/commands/init/context-step.js.map +1 -0
- package/dist/cli/commands/init/index.js +67 -0
- package/dist/cli/commands/init/index.js.map +1 -0
- package/dist/cli/commands/init/project-step.js +105 -0
- package/dist/cli/commands/init/project-step.js.map +1 -0
- package/dist/cli/commands/init/provision-step.js +76 -0
- package/dist/cli/commands/init/provision-step.js.map +1 -0
- package/dist/cli/commands/validate-plan.js +42 -0
- package/dist/cli/commands/validate-plan.js.map +1 -0
- package/dist/cli/flows/clients.js +27 -17
- package/dist/cli/flows/clients.js.map +1 -1
- package/dist/cli.js +7 -5
- package/dist/cli.js.map +1 -1
- package/dist/config.js +19 -11
- package/dist/config.js.map +1 -1
- package/dist/constants.js +7 -8
- package/dist/constants.js.map +1 -1
- package/dist/lib/autopull.js +13 -0
- package/dist/lib/autopull.js.map +1 -0
- package/dist/lib/client-configs.js +37 -25
- package/dist/lib/client-configs.js.map +1 -1
- package/dist/lib/cowork-extension.js +42 -30
- package/dist/lib/cowork-extension.js.map +1 -1
- package/dist/lib/dependencies.js +83 -247
- package/dist/lib/dependencies.js.map +1 -1
- package/dist/lib/dependency-install.js +163 -0
- package/dist/lib/dependency-install.js.map +1 -0
- package/dist/lib/exec-delegate.js +2 -2
- package/dist/lib/exec-delegate.js.map +1 -1
- package/dist/lib/exec-engines.js +7 -6
- package/dist/lib/exec-engines.js.map +1 -1
- package/dist/lib/provision-apply.js +214 -0
- package/dist/lib/provision-apply.js.map +1 -0
- package/dist/lib/provision-collect.js +47 -0
- package/dist/lib/provision-collect.js.map +1 -0
- package/dist/lib/provision.js +8 -253
- package/dist/lib/provision.js.map +1 -1
- package/dist/lib/require-config.js +3 -2
- package/dist/lib/require-config.js.map +1 -1
- package/dist/lib/skills-cache.js +9 -8
- package/dist/lib/skills-cache.js.map +1 -1
- package/dist/lib/skills.js +30 -16
- package/dist/lib/skills.js.map +1 -1
- package/dist/lib/telemetry.js +2 -1
- package/dist/lib/telemetry.js.map +1 -1
- package/dist/lib/validate-plan-delegate.js +105 -0
- package/dist/lib/validate-plan-delegate.js.map +1 -0
- package/dist/lib/version-check.js +3 -2
- package/dist/lib/version-check.js.map +1 -1
- package/dist/mcp-server.js +107 -79
- package/dist/mcp-server.js.map +1 -1
- package/dist/tools/comment-task.js +32 -32
- package/dist/tools/comment-task.js.map +1 -1
- package/dist/tools/create-task.js +92 -101
- package/dist/tools/create-task.js.map +1 -1
- package/dist/tools/delegate-exec.js +4 -3
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/end-allocation.js +19 -32
- package/dist/tools/end-allocation.js.map +1 -1
- package/dist/tools/end-task-allocation.js +17 -26
- package/dist/tools/end-task-allocation.js.map +1 -1
- package/dist/tools/exec-status.js +4 -3
- package/dist/tools/exec-status.js.map +1 -1
- package/dist/tools/get-active-allocation.js +53 -60
- package/dist/tools/get-active-allocation.js.map +1 -1
- package/dist/tools/get-context.js +4 -3
- package/dist/tools/get-context.js.map +1 -1
- package/dist/tools/get-task.js +144 -142
- package/dist/tools/get-task.js.map +1 -1
- package/dist/tools/index.js +2 -0
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/list-my-allocations.js +35 -43
- package/dist/tools/list-my-allocations.js.map +1 -1
- package/dist/tools/list-projects.js +3 -2
- package/dist/tools/list-projects.js.map +1 -1
- package/dist/tools/list-tasks.js +117 -124
- package/dist/tools/list-tasks.js.map +1 -1
- package/dist/tools/move-task.js +37 -39
- package/dist/tools/move-task.js.map +1 -1
- package/dist/tools/plan.js +3 -2
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/record-delivery.js +4 -3
- package/dist/tools/record-delivery.js.map +1 -1
- package/dist/tools/set-project.js +9 -4
- package/dist/tools/set-project.js.map +1 -1
- package/dist/tools/start-allocation.js +16 -26
- package/dist/tools/start-allocation.js.map +1 -1
- package/dist/tools/start-task-allocation.js +72 -92
- package/dist/tools/start-task-allocation.js.map +1 -1
- package/dist/tools/update-task.js +149 -168
- package/dist/tools/update-task.js.map +1 -1
- package/dist/tools/validate-plan.js +58 -0
- package/dist/tools/validate-plan.js.map +1 -0
- package/package.json +1 -1
- package/dist/cli/commands/init.js +0 -336
- package/dist/cli/commands/init.js.map +0 -1
- package/dist/logo.js +0 -17
- package/dist/logo.js.map +0 -1
package/dist/lib/dependencies.js
CHANGED
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { homedir } from 'node:os';
|
|
4
|
-
import { dirname, join } from 'node:path';
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { homePath } from '../brand.js';
|
|
5
3
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* disso lemos campos **estruturados e allowlisted** (`npm:` / `skills:` / `git:`),
|
|
10
|
-
* validamos com regex estrita e montamos o comando nós mesmos — rodado via
|
|
11
|
-
* `spawnSync` com array de args e SEM shell, então não há interpolação/injeção.
|
|
12
|
-
*
|
|
13
|
-
* A decisão de *rodar* fica na CLI, com consentimento humano [y/N].
|
|
4
|
+
* Resolve dependências (docs `dependency`) num plano; o IO vive em `dependency-install.ts`
|
|
5
|
+
* (reexportado abaixo). SEGURANÇA: nunca executamos `install:` (só exibição) — lemos campos
|
|
6
|
+
* allowlisted (`npm:`/`skills:`/`git:`), validados por regex, e rodamos via `spawnSync` sem shell.
|
|
14
7
|
*/
|
|
15
8
|
/** Nome de pacote npm (com escopo opcional). Sem espaços/metacaracteres de shell. */
|
|
16
9
|
const NPM_NAME_RE = /^(?:@[a-z0-9-][a-z0-9-._]*\/)?[a-z0-9-][a-z0-9-._]*$/i;
|
|
@@ -22,7 +15,7 @@ const SKILLS_REPO_RE = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)?$
|
|
|
22
15
|
const PLUGIN_ID_RE = /^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+$/;
|
|
23
16
|
/** Onde clonamos deps do tipo `git` (`~/.noclaf/deps/<id>`). */
|
|
24
17
|
function depsDir() {
|
|
25
|
-
return
|
|
18
|
+
return homePath('deps');
|
|
26
19
|
}
|
|
27
20
|
/** Plano `skills` (skills.sh) a partir de um slug validado, ou `null` se inválido. */
|
|
28
21
|
export function skillsInstallPlan(slug) {
|
|
@@ -37,9 +30,74 @@ export function skillsInstallPlan(slug) {
|
|
|
37
30
|
command: `npx --yes skills add ${s}`,
|
|
38
31
|
};
|
|
39
32
|
}
|
|
33
|
+
function resolveNpmPlan(npm) {
|
|
34
|
+
if (!NPM_NAME_RE.test(npm))
|
|
35
|
+
return { plan: null, reason: `nome de pacote npm inválido: "${npm}"` };
|
|
36
|
+
return {
|
|
37
|
+
plan: { kind: 'npm', pkg: npm, program: 'npm', args: ['install', '-g', npm], command: `npm install -g ${npm}` },
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
// `owner/repo/skill` → instala o skill específico com `--skill` (senão o
|
|
41
|
+
// `skills add` clona o monorepo inteiro e não acha o SKILL.md).
|
|
42
|
+
function resolveSkillsPlan(skills) {
|
|
43
|
+
if (!SKILLS_REPO_RE.test(skills)) {
|
|
44
|
+
return { plan: null, reason: `repo de skills inválido (owner/repo[/skill]): "${skills}"` };
|
|
45
|
+
}
|
|
46
|
+
const segs = skills.split('/');
|
|
47
|
+
const repoSlug = segs.slice(0, 2).join('/');
|
|
48
|
+
const skillName = segs.length >= 3 ? segs.slice(2).join('/') : null;
|
|
49
|
+
const args = skillName
|
|
50
|
+
? ['--yes', 'skills', 'add', repoSlug, '--skill', skillName]
|
|
51
|
+
: ['--yes', 'skills', 'add', repoSlug];
|
|
52
|
+
return { plan: { kind: 'skills', repo: skills, program: 'npx', args, command: `npx ${args.join(' ')}` } };
|
|
53
|
+
}
|
|
54
|
+
function resolveGitPlan(git, id) {
|
|
55
|
+
if (!GIT_URL_RE.test(git)) {
|
|
56
|
+
return { plan: null, reason: `URL git não permitida (só https://github.com/…): "${git}"` };
|
|
57
|
+
}
|
|
58
|
+
const dest = join(depsDir(), id);
|
|
59
|
+
return {
|
|
60
|
+
plan: {
|
|
61
|
+
kind: 'git',
|
|
62
|
+
url: git,
|
|
63
|
+
dest,
|
|
64
|
+
program: 'git',
|
|
65
|
+
args: ['clone', '--depth', '1', git, dest],
|
|
66
|
+
command: `git clone --depth 1 ${git} ${dest}`,
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
// Plugin do Claude Code: `claude-plugin: <owner/repo> <plugin@marketplace>`.
|
|
71
|
+
function resolveClaudePluginPlan(claudePlugin) {
|
|
72
|
+
const [marketplace, plugin] = claudePlugin.split(/\s+/);
|
|
73
|
+
if (marketplace && plugin && SKILLS_REPO_RE.test(marketplace) && PLUGIN_ID_RE.test(plugin)) {
|
|
74
|
+
return {
|
|
75
|
+
plan: {
|
|
76
|
+
kind: 'claude-plugin',
|
|
77
|
+
marketplace,
|
|
78
|
+
plugin,
|
|
79
|
+
steps: [
|
|
80
|
+
{ program: 'claude', args: ['plugin', 'marketplace', 'add', marketplace] },
|
|
81
|
+
{ program: 'claude', args: ['plugin', 'install', plugin] },
|
|
82
|
+
],
|
|
83
|
+
command: `claude plugin marketplace add ${marketplace} && claude plugin install ${plugin}`,
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
plan: null,
|
|
89
|
+
reason: `claude-plugin inválido (esperado "<owner/repo> <plugin@marketplace>"): "${claudePlugin}"`,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
function applyPlanResult(base, r) {
|
|
93
|
+
return r.plan ? { ...base, plan: r.plan } : { ...base, reason: r.reason };
|
|
94
|
+
}
|
|
40
95
|
/**
|
|
41
96
|
* Resolve um doc `dependency` num plano de instalação a partir de campos
|
|
42
97
|
* estruturados. Precedência: `npm:` > `skills:` > `git:`. Sem campo válido → `plan: null`.
|
|
98
|
+
* Passos manuais ficam disponíveis mesmo com plano automatizável (ex.: um plugin
|
|
99
|
+
* `claude-plugin` que o Claude Code instala sozinho mas o Codex/Desktop não); sem
|
|
100
|
+
* nenhum instalador automatizável, cai pra instrução manual (plugin/marketplace/UI).
|
|
43
101
|
*/
|
|
44
102
|
export function resolveDependency(node) {
|
|
45
103
|
const fm = node.frontmatter;
|
|
@@ -50,133 +108,26 @@ export function resolveDependency(node) {
|
|
|
50
108
|
repo: fm.repo || fm.homepage || undefined,
|
|
51
109
|
displayInstall: fm.install || undefined,
|
|
52
110
|
detect: parseDetect(fm.detect),
|
|
53
|
-
// Passos manuais ficam disponíveis mesmo com plano automatizável (ex.: um plugin
|
|
54
|
-
// `claude-plugin` que o Claude Code instala sozinho mas o Codex/Desktop não).
|
|
55
111
|
manual: fm.manual?.trim() || undefined,
|
|
56
112
|
plan: null,
|
|
57
113
|
};
|
|
58
114
|
const npm = fm.npm?.trim();
|
|
59
|
-
if (npm)
|
|
60
|
-
|
|
61
|
-
return {
|
|
62
|
-
...base,
|
|
63
|
-
plan: {
|
|
64
|
-
kind: 'npm',
|
|
65
|
-
pkg: npm,
|
|
66
|
-
program: 'npm',
|
|
67
|
-
args: ['install', '-g', npm],
|
|
68
|
-
command: `npm install -g ${npm}`,
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
}
|
|
72
|
-
return { ...base, reason: `nome de pacote npm inválido: "${npm}"` };
|
|
73
|
-
}
|
|
115
|
+
if (npm)
|
|
116
|
+
return applyPlanResult(base, resolveNpmPlan(npm));
|
|
74
117
|
const skills = fm.skills?.trim();
|
|
75
|
-
if (skills)
|
|
76
|
-
|
|
77
|
-
// `owner/repo/skill` → instala o skill específico com `--skill` (senão o
|
|
78
|
-
// `skills add` clona o monorepo inteiro e não acha o SKILL.md).
|
|
79
|
-
const segs = skills.split('/');
|
|
80
|
-
const repoSlug = segs.slice(0, 2).join('/');
|
|
81
|
-
const skillName = segs.length >= 3 ? segs.slice(2).join('/') : null;
|
|
82
|
-
const args = skillName
|
|
83
|
-
? ['--yes', 'skills', 'add', repoSlug, '--skill', skillName]
|
|
84
|
-
: ['--yes', 'skills', 'add', repoSlug];
|
|
85
|
-
return {
|
|
86
|
-
...base,
|
|
87
|
-
plan: {
|
|
88
|
-
kind: 'skills',
|
|
89
|
-
repo: skills,
|
|
90
|
-
program: 'npx',
|
|
91
|
-
args,
|
|
92
|
-
command: `npx ${args.join(' ')}`,
|
|
93
|
-
},
|
|
94
|
-
};
|
|
95
|
-
}
|
|
96
|
-
return { ...base, reason: `repo de skills inválido (owner/repo[/skill]): "${skills}"` };
|
|
97
|
-
}
|
|
118
|
+
if (skills)
|
|
119
|
+
return applyPlanResult(base, resolveSkillsPlan(skills));
|
|
98
120
|
const git = fm.git?.trim();
|
|
99
|
-
if (git)
|
|
100
|
-
|
|
101
|
-
const dest = join(depsDir(), node.id);
|
|
102
|
-
return {
|
|
103
|
-
...base,
|
|
104
|
-
plan: {
|
|
105
|
-
kind: 'git',
|
|
106
|
-
url: git,
|
|
107
|
-
dest,
|
|
108
|
-
program: 'git',
|
|
109
|
-
args: ['clone', '--depth', '1', git, dest],
|
|
110
|
-
command: `git clone --depth 1 ${git} ${dest}`,
|
|
111
|
-
},
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
return { ...base, reason: `URL git não permitida (só https://github.com/…): "${git}"` };
|
|
115
|
-
}
|
|
116
|
-
// Plugin do Claude Code: `claude-plugin: <owner/repo> <plugin@marketplace>`.
|
|
121
|
+
if (git)
|
|
122
|
+
return applyPlanResult(base, resolveGitPlan(git, node.id));
|
|
117
123
|
const claudePlugin = fm['claude-plugin']?.trim();
|
|
118
|
-
if (claudePlugin)
|
|
119
|
-
|
|
120
|
-
if (marketplace && plugin && SKILLS_REPO_RE.test(marketplace) && PLUGIN_ID_RE.test(plugin)) {
|
|
121
|
-
return {
|
|
122
|
-
...base,
|
|
123
|
-
plan: {
|
|
124
|
-
kind: 'claude-plugin',
|
|
125
|
-
marketplace,
|
|
126
|
-
plugin,
|
|
127
|
-
steps: [
|
|
128
|
-
{ program: 'claude', args: ['plugin', 'marketplace', 'add', marketplace] },
|
|
129
|
-
{ program: 'claude', args: ['plugin', 'install', plugin] },
|
|
130
|
-
],
|
|
131
|
-
command: `claude plugin marketplace add ${marketplace} && claude plugin install ${plugin}`,
|
|
132
|
-
},
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
return {
|
|
136
|
-
...base,
|
|
137
|
-
reason: `claude-plugin inválido (esperado "<owner/repo> <plugin@marketplace>"): "${claudePlugin}"`,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
// Sem instalador automatizável: cai pra instrução manual (plugin/marketplace/UI).
|
|
124
|
+
if (claudePlugin)
|
|
125
|
+
return applyPlanResult(base, resolveClaudePluginPlan(claudePlugin));
|
|
141
126
|
const manual = fm.manual?.trim();
|
|
142
127
|
if (manual)
|
|
143
128
|
return { ...base, manual, reason: 'instalação manual' };
|
|
144
129
|
return { ...base, reason: 'sem instalador estruturado (npm:/skills:/git:/manual:) — instale manualmente' };
|
|
145
130
|
}
|
|
146
|
-
/** Registro do que o noclaf instalou: `~/.noclaf/installed-deps.json`. */
|
|
147
|
-
function markerPath() {
|
|
148
|
-
return join(homedir(), '.noclaf', 'installed-deps.json');
|
|
149
|
-
}
|
|
150
|
-
function readMarker() {
|
|
151
|
-
try {
|
|
152
|
-
return JSON.parse(readFileSync(markerPath(), 'utf-8'));
|
|
153
|
-
}
|
|
154
|
-
catch {
|
|
155
|
-
return {};
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
/** Grava que instalamos esta dependência (idempotência p/ `skills`, que não tem local padrão). */
|
|
159
|
-
export function recordDependencyInstalled(dep) {
|
|
160
|
-
const plan = dep.plan;
|
|
161
|
-
if (!plan)
|
|
162
|
-
return;
|
|
163
|
-
const ref = plan.kind === 'npm'
|
|
164
|
-
? plan.pkg
|
|
165
|
-
: plan.kind === 'skills'
|
|
166
|
-
? plan.repo
|
|
167
|
-
: plan.kind === 'git'
|
|
168
|
-
? plan.url
|
|
169
|
-
: plan.plugin; // claude-plugin
|
|
170
|
-
const marker = readMarker();
|
|
171
|
-
marker[dep.id] = { kind: plan.kind, ref, at: new Date().toISOString() };
|
|
172
|
-
try {
|
|
173
|
-
mkdirSync(dirname(markerPath()), { recursive: true });
|
|
174
|
-
writeFileSync(markerPath(), JSON.stringify(marker, null, 2) + '\n');
|
|
175
|
-
}
|
|
176
|
-
catch {
|
|
177
|
-
// best-effort — não bloqueia se ~/.noclaf não for gravável.
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
131
|
/** `detect:` cru → lista de globs (separados por vírgula/quebra de linha). */
|
|
181
132
|
function parseDetect(value) {
|
|
182
133
|
if (!value)
|
|
@@ -187,123 +138,8 @@ function parseDetect(value) {
|
|
|
187
138
|
.filter(Boolean);
|
|
188
139
|
return list.length ? list : undefined;
|
|
189
140
|
}
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
// lstat pega o link; confirma que o alvo resolve (não é pendurado).
|
|
195
|
-
return existsSync(p);
|
|
196
|
-
}
|
|
197
|
-
catch {
|
|
198
|
-
return false;
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
/** Expande `~` inicial pro home. */
|
|
202
|
-
function expandTilde(p) {
|
|
203
|
-
return p === '~' || p.startsWith('~/') || p.startsWith('~\\')
|
|
204
|
-
? join(homedir(), p.slice(1))
|
|
205
|
-
: p;
|
|
206
|
-
}
|
|
207
|
-
/**
|
|
208
|
-
* Existe algo casando o glob? Suporta `*` (um segmento) e `**` (qualquer
|
|
209
|
-
* profundidade). Recursão limitada em profundidade pra não varrer demais.
|
|
210
|
-
*/
|
|
211
|
-
function globExists(pattern) {
|
|
212
|
-
const expanded = expandTilde(pattern.trim());
|
|
213
|
-
const abs = expanded.startsWith('/') || /^[A-Za-z]:/.test(expanded);
|
|
214
|
-
const segs = expanded.split(/[/\\]+/).filter(Boolean);
|
|
215
|
-
const start = abs ? '/' : process.cwd();
|
|
216
|
-
return matchSegments(start, segs, 0, 0);
|
|
217
|
-
}
|
|
218
|
-
function matchSegments(base, segs, i, depth) {
|
|
219
|
-
if (depth > 12)
|
|
220
|
-
return false;
|
|
221
|
-
if (i >= segs.length)
|
|
222
|
-
return pathExists(base);
|
|
223
|
-
const seg = segs[i];
|
|
224
|
-
if (seg === '**') {
|
|
225
|
-
if (matchSegments(base, segs, i + 1, depth))
|
|
226
|
-
return true; // zero dirs
|
|
227
|
-
for (const child of childDirs(base)) {
|
|
228
|
-
if (matchSegments(join(base, child), segs, i, depth + 1))
|
|
229
|
-
return true;
|
|
230
|
-
}
|
|
231
|
-
return false;
|
|
232
|
-
}
|
|
233
|
-
if (seg.includes('*')) {
|
|
234
|
-
const re = new RegExp('^' + seg.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*') + '$');
|
|
235
|
-
for (const child of childDirs(base)) {
|
|
236
|
-
if (re.test(child) && matchSegments(join(base, child), segs, i + 1, depth + 1))
|
|
237
|
-
return true;
|
|
238
|
-
}
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
return matchSegments(join(base, seg), segs, i + 1, depth);
|
|
242
|
-
}
|
|
243
|
-
function childDirs(base) {
|
|
244
|
-
try {
|
|
245
|
-
return readdirSync(base, { withFileTypes: true })
|
|
246
|
-
.filter((e) => e.isDirectory() || e.isSymbolicLink())
|
|
247
|
-
.map((e) => e.name);
|
|
248
|
-
}
|
|
249
|
-
catch {
|
|
250
|
-
return [];
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
/** Probe de locais conhecidos onde `npx skills add` costuma instalar. */
|
|
254
|
-
function skillInstalledElsewhere(repo) {
|
|
255
|
-
const name = repo.split('/').pop() ?? repo;
|
|
256
|
-
return [
|
|
257
|
-
join(homedir(), '.claude', 'skills', name),
|
|
258
|
-
join(homedir(), '.codex', 'skills', name),
|
|
259
|
-
join(process.cwd(), '.claude', 'skills', name),
|
|
260
|
-
join(process.cwd(), 'skills', name),
|
|
261
|
-
].some((p) => existsSync(p));
|
|
262
|
-
}
|
|
263
|
-
/**
|
|
264
|
-
* Já está instalado? Checagem real quando dá:
|
|
265
|
-
* - `npm` → `npm ls -g <pkg>` (autoritativo);
|
|
266
|
-
* - `git` → diretório de destino existe;
|
|
267
|
-
* - `skills` → sem local padrão: usa o marcador do noclaf + probe de dirs conhecidos.
|
|
268
|
-
*/
|
|
269
|
-
export function isDependencyInstalled(dep) {
|
|
270
|
-
// `detect:` vale pra qualquer tipo — inclusive `manual:` (plugins), que não têm plano.
|
|
271
|
-
if (dep.detect && dep.detect.some(globExists))
|
|
272
|
-
return true;
|
|
273
|
-
const plan = dep.plan;
|
|
274
|
-
if (!plan)
|
|
275
|
-
return false;
|
|
276
|
-
if (plan.kind === 'git')
|
|
277
|
-
return existsSync(plan.dest);
|
|
278
|
-
if (plan.kind === 'npm') {
|
|
279
|
-
const res = spawnSync('npm', ['ls', '-g', plan.pkg, '--depth=0'], { stdio: 'ignore' });
|
|
280
|
-
return res.status === 0;
|
|
281
|
-
}
|
|
282
|
-
if (plan.kind === 'skills') {
|
|
283
|
-
return Boolean(readMarker()[dep.id]) || skillInstalledElsewhere(plan.repo);
|
|
284
|
-
}
|
|
285
|
-
// claude-plugin: sem local padrão universal — o `detect:` (acima) é o sinal
|
|
286
|
-
// primário; o marcador cobre o caso de já termos instalado nesta máquina.
|
|
287
|
-
return Boolean(readMarker()[dep.id]);
|
|
288
|
-
}
|
|
289
|
-
/** Executa o plano. `spawnSync` com args em array e SEM shell — zero injeção. */
|
|
290
|
-
export function runDependencyInstall(plan) {
|
|
291
|
-
// claude-plugin: vários passos sequenciais (`marketplace add` → `install`).
|
|
292
|
-
if (plan.kind === 'claude-plugin') {
|
|
293
|
-
for (const step of plan.steps) {
|
|
294
|
-
const res = spawnSync(step.program, step.args, { stdio: 'inherit' });
|
|
295
|
-
if (res.error)
|
|
296
|
-
return { ok: false, code: null, error: res.error.message };
|
|
297
|
-
if (res.status !== 0)
|
|
298
|
-
return { ok: false, code: res.status };
|
|
299
|
-
}
|
|
300
|
-
return { ok: true, code: 0 };
|
|
301
|
-
}
|
|
302
|
-
if (plan.kind === 'git')
|
|
303
|
-
mkdirSync(dirname(plan.dest), { recursive: true });
|
|
304
|
-
const res = spawnSync(plan.program, plan.args, { stdio: 'inherit' });
|
|
305
|
-
if (res.error)
|
|
306
|
-
return { ok: false, code: null, error: res.error.message };
|
|
307
|
-
return { ok: res.status === 0, code: res.status };
|
|
308
|
-
}
|
|
141
|
+
// Checagem de "já instalado", execução do plano e o marcador de instalações são
|
|
142
|
+
// IO puro — vivem em `dependency-install.ts`. Reexportado daqui pra manter o
|
|
143
|
+
// import único (`from '../lib/dependencies.js'`) pro resto da CLI.
|
|
144
|
+
export { recordDependencyInstalled, isDependencyInstalled, runDependencyInstall, } from './dependency-install.js';
|
|
309
145
|
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/lib/dependencies.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/lib/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
import { spawnSync } from 'node:child_process';
|
|
2
|
+
import { existsSync, lstatSync, mkdirSync, readdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { dirname, join } from 'node:path';
|
|
5
|
+
import { homePath } from '../brand.js';
|
|
6
|
+
/**
|
|
7
|
+
* Decide se uma dependência já está instalada e executa o plano quando o usuário
|
|
8
|
+
* consente. Complementa `dependencies.ts` (resolução doc → plano) — este módulo é
|
|
9
|
+
* a camada de IO: checagem no disco/subprocesso e o marcador de instalações.
|
|
10
|
+
*/
|
|
11
|
+
/** Registro do que o noclaf instalou: `~/.noclaf/installed-deps.json`. */
|
|
12
|
+
function markerPath() {
|
|
13
|
+
return homePath('installed-deps.json');
|
|
14
|
+
}
|
|
15
|
+
function readMarker() {
|
|
16
|
+
try {
|
|
17
|
+
return JSON.parse(readFileSync(markerPath(), 'utf-8'));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return {};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
/** Grava que instalamos esta dependência (idempotência p/ `skills`, que não tem local padrão). */
|
|
24
|
+
export function recordDependencyInstalled(dep) {
|
|
25
|
+
const plan = dep.plan;
|
|
26
|
+
if (!plan)
|
|
27
|
+
return;
|
|
28
|
+
const ref = plan.kind === 'npm'
|
|
29
|
+
? plan.pkg
|
|
30
|
+
: plan.kind === 'skills'
|
|
31
|
+
? plan.repo
|
|
32
|
+
: plan.kind === 'git'
|
|
33
|
+
? plan.url
|
|
34
|
+
: plan.plugin; // claude-plugin
|
|
35
|
+
const marker = readMarker();
|
|
36
|
+
marker[dep.id] = { kind: plan.kind, ref, at: new Date().toISOString() };
|
|
37
|
+
try {
|
|
38
|
+
mkdirSync(dirname(markerPath()), { recursive: true });
|
|
39
|
+
writeFileSync(markerPath(), JSON.stringify(marker, null, 2) + '\n');
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// best-effort — não bloqueia se ~/.noclaf não for gravável.
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Existe no disco (segue symlinks; symlink pendurado conta como ausente). */
|
|
46
|
+
function pathExists(p) {
|
|
47
|
+
try {
|
|
48
|
+
lstatSync(p);
|
|
49
|
+
// lstat pega o link; confirma que o alvo resolve (não é pendurado).
|
|
50
|
+
return existsSync(p);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
return false;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
/** Expande `~` inicial pro home. */
|
|
57
|
+
function expandTilde(p) {
|
|
58
|
+
return p === '~' || p.startsWith('~/') || p.startsWith('~\\')
|
|
59
|
+
? join(homedir(), p.slice(1))
|
|
60
|
+
: p;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Existe algo casando o glob? Suporta `*` (um segmento) e `**` (qualquer
|
|
64
|
+
* profundidade). Recursão limitada em profundidade pra não varrer demais.
|
|
65
|
+
*/
|
|
66
|
+
function globExists(pattern) {
|
|
67
|
+
const expanded = expandTilde(pattern.trim());
|
|
68
|
+
const abs = expanded.startsWith('/') || /^[A-Za-z]:/.test(expanded);
|
|
69
|
+
const segs = expanded.split(/[/\\]+/).filter(Boolean);
|
|
70
|
+
const start = abs ? '/' : process.cwd();
|
|
71
|
+
return matchSegments(start, segs, 0, 0);
|
|
72
|
+
}
|
|
73
|
+
function matchSegments(base, segs, i, depth) {
|
|
74
|
+
if (depth > 12)
|
|
75
|
+
return false;
|
|
76
|
+
if (i >= segs.length)
|
|
77
|
+
return pathExists(base);
|
|
78
|
+
const seg = segs[i];
|
|
79
|
+
if (seg === '**') {
|
|
80
|
+
if (matchSegments(base, segs, i + 1, depth))
|
|
81
|
+
return true; // zero dirs
|
|
82
|
+
for (const child of childDirs(base)) {
|
|
83
|
+
if (matchSegments(join(base, child), segs, i, depth + 1))
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
if (seg.includes('*')) {
|
|
89
|
+
const re = new RegExp('^' + seg.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*') + '$');
|
|
90
|
+
for (const child of childDirs(base)) {
|
|
91
|
+
if (re.test(child) && matchSegments(join(base, child), segs, i + 1, depth + 1))
|
|
92
|
+
return true;
|
|
93
|
+
}
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
return matchSegments(join(base, seg), segs, i + 1, depth);
|
|
97
|
+
}
|
|
98
|
+
function childDirs(base) {
|
|
99
|
+
try {
|
|
100
|
+
return readdirSync(base, { withFileTypes: true })
|
|
101
|
+
.filter((e) => e.isDirectory() || e.isSymbolicLink())
|
|
102
|
+
.map((e) => e.name);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
return [];
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/** Probe de locais conhecidos onde `npx skills add` costuma instalar. */
|
|
109
|
+
function skillInstalledElsewhere(repo) {
|
|
110
|
+
const name = repo.split('/').pop() ?? repo;
|
|
111
|
+
return [
|
|
112
|
+
join(homedir(), '.claude', 'skills', name),
|
|
113
|
+
join(homedir(), '.codex', 'skills', name),
|
|
114
|
+
join(process.cwd(), '.claude', 'skills', name),
|
|
115
|
+
join(process.cwd(), 'skills', name),
|
|
116
|
+
].some((p) => existsSync(p));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Já instalado? `npm` → `npm ls -g <pkg>` (autoritativo); `git` → dir de destino
|
|
120
|
+
* existe; `skills` → sem local padrão, usa o marcador do noclaf + probe de dirs
|
|
121
|
+
* conhecidos.
|
|
122
|
+
*/
|
|
123
|
+
export function isDependencyInstalled(dep) {
|
|
124
|
+
// `detect:` vale pra qualquer tipo — inclusive `manual:` (plugins), que não têm plano.
|
|
125
|
+
if (dep.detect && dep.detect.some(globExists))
|
|
126
|
+
return true;
|
|
127
|
+
const plan = dep.plan;
|
|
128
|
+
if (!plan)
|
|
129
|
+
return false;
|
|
130
|
+
if (plan.kind === 'git')
|
|
131
|
+
return existsSync(plan.dest);
|
|
132
|
+
if (plan.kind === 'npm') {
|
|
133
|
+
const res = spawnSync('npm', ['ls', '-g', plan.pkg, '--depth=0'], { stdio: 'ignore' });
|
|
134
|
+
return res.status === 0;
|
|
135
|
+
}
|
|
136
|
+
if (plan.kind === 'skills') {
|
|
137
|
+
return Boolean(readMarker()[dep.id]) || skillInstalledElsewhere(plan.repo);
|
|
138
|
+
}
|
|
139
|
+
// claude-plugin: sem local padrão universal — o `detect:` (acima) é o sinal
|
|
140
|
+
// primário; o marcador cobre o caso de já termos instalado nesta máquina.
|
|
141
|
+
return Boolean(readMarker()[dep.id]);
|
|
142
|
+
}
|
|
143
|
+
/** Executa o plano. `spawnSync` com args em array e SEM shell — zero injeção. */
|
|
144
|
+
export function runDependencyInstall(plan) {
|
|
145
|
+
// claude-plugin: vários passos sequenciais (`marketplace add` → `install`).
|
|
146
|
+
if (plan.kind === 'claude-plugin') {
|
|
147
|
+
for (const step of plan.steps) {
|
|
148
|
+
const res = spawnSync(step.program, step.args, { stdio: 'inherit' });
|
|
149
|
+
if (res.error)
|
|
150
|
+
return { ok: false, code: null, error: res.error.message };
|
|
151
|
+
if (res.status !== 0)
|
|
152
|
+
return { ok: false, code: res.status };
|
|
153
|
+
}
|
|
154
|
+
return { ok: true, code: 0 };
|
|
155
|
+
}
|
|
156
|
+
if (plan.kind === 'git')
|
|
157
|
+
mkdirSync(dirname(plan.dest), { recursive: true });
|
|
158
|
+
const res = spawnSync(plan.program, plan.args, { stdio: 'inherit' });
|
|
159
|
+
if (res.error)
|
|
160
|
+
return { ok: false, code: null, error: res.error.message };
|
|
161
|
+
return { ok: res.status === 0, code: res.status };
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=dependency-install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dependency-install.js","sourceRoot":"","sources":["../../src/lib/dependency-install.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { spawn, spawnSync } from 'node:child_process';
|
|
2
2
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { homedir } from 'node:os';
|
|
4
3
|
import { join } from 'node:path';
|
|
5
4
|
import { randomUUID } from 'node:crypto';
|
|
6
5
|
import { skillsDir } from './skills.js';
|
|
6
|
+
import { homePath } from '../brand.js';
|
|
7
7
|
import { DEFAULT_ENGINE, engineArgs, engineMissingError, resolveEngineBin, } from './exec-engines.js';
|
|
8
8
|
const jobs = new Map();
|
|
9
9
|
function jobsDir() {
|
|
10
|
-
return
|
|
10
|
+
return homePath('exec-jobs');
|
|
11
11
|
}
|
|
12
12
|
function jobPath(id) {
|
|
13
13
|
return join(jobsDir(), `${id}.json`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../src/lib/exec-delegate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../src/lib/exec-delegate.ts"],"names":[],"mappings":"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"}
|