@noclaf/cli 0.7.0 → 0.9.0
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/README.md +26 -84
- package/dist/app.js +13 -0
- package/dist/app.js.map +1 -0
- package/dist/brand.js +9 -49
- package/dist/brand.js.map +1 -1
- package/dist/cli.js +3 -37
- package/dist/cli.js.map +1 -1
- package/dist/mcp-server.js +3 -187
- package/dist/mcp-server.js.map +1 -1
- package/package.json +8 -17
- package/dist/adapters/supabase/allocation-gateway.js +0 -291
- package/dist/adapters/supabase/allocation-gateway.js.map +0 -1
- package/dist/adapters/supabase/analytics-gateway.js +0 -18
- package/dist/adapters/supabase/analytics-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-gateway.js +0 -48
- package/dist/adapters/supabase/calendar-gateway.js.map +0 -1
- package/dist/adapters/supabase/calendar-write-gateway.js +0 -35
- package/dist/adapters/supabase/calendar-write-gateway.js.map +0 -1
- package/dist/adapters/supabase/client.js +0 -136
- package/dist/adapters/supabase/client.js.map +0 -1
- package/dist/adapters/supabase/context-gateway.js +0 -23
- package/dist/adapters/supabase/context-gateway.js.map +0 -1
- package/dist/adapters/supabase/gateway.js +0 -26
- package/dist/adapters/supabase/gateway.js.map +0 -1
- package/dist/adapters/supabase/release-gateway.js +0 -61
- package/dist/adapters/supabase/release-gateway.js.map +0 -1
- package/dist/adapters/supabase/sprint-gateway.js +0 -59
- package/dist/adapters/supabase/sprint-gateway.js.map +0 -1
- package/dist/adapters/supabase/task-gateway.js +0 -533
- package/dist/adapters/supabase/task-gateway.js.map +0 -1
- package/dist/auth.js +0 -141
- package/dist/auth.js.map +0 -1
- package/dist/cli/commands/auth.js +0 -127
- package/dist/cli/commands/auth.js.map +0 -1
- package/dist/cli/commands/clean.js +0 -120
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/cli/commands/completion.js +0 -114
- package/dist/cli/commands/completion.js.map +0 -1
- package/dist/cli/commands/exec.js +0 -69
- package/dist/cli/commands/exec.js.map +0 -1
- package/dist/cli/commands/init/analyze-step.js +0 -21
- package/dist/cli/commands/init/analyze-step.js.map +0 -1
- package/dist/cli/commands/init/apply-answers.js +0 -122
- package/dist/cli/commands/init/apply-answers.js.map +0 -1
- package/dist/cli/commands/init/apply-step.js +0 -165
- package/dist/cli/commands/init/apply-step.js.map +0 -1
- package/dist/cli/commands/init/auth-step.js +0 -48
- package/dist/cli/commands/init/auth-step.js.map +0 -1
- package/dist/cli/commands/init/boilerplate-step.js +0 -20
- package/dist/cli/commands/init/boilerplate-step.js.map +0 -1
- package/dist/cli/commands/init/clients-step.js +0 -78
- package/dist/cli/commands/init/clients-step.js.map +0 -1
- package/dist/cli/commands/init/context-step.js +0 -81
- package/dist/cli/commands/init/context-step.js.map +0 -1
- package/dist/cli/commands/init/describe-step.js +0 -68
- package/dist/cli/commands/init/describe-step.js.map +0 -1
- package/dist/cli/commands/init/index.js +0 -98
- package/dist/cli/commands/init/index.js.map +0 -1
- package/dist/cli/commands/init/mode.js +0 -18
- package/dist/cli/commands/init/mode.js.map +0 -1
- package/dist/cli/commands/init/progress.js +0 -60
- package/dist/cli/commands/init/progress.js.map +0 -1
- package/dist/cli/commands/init/project-step.js +0 -133
- package/dist/cli/commands/init/project-step.js.map +0 -1
- package/dist/cli/commands/init/provision-step.js +0 -103
- package/dist/cli/commands/init/provision-step.js.map +0 -1
- package/dist/cli/commands/map.js +0 -18
- package/dist/cli/commands/map.js.map +0 -1
- package/dist/cli/commands/plan.js +0 -45
- package/dist/cli/commands/plan.js.map +0 -1
- package/dist/cli/commands/skills.js +0 -23
- package/dist/cli/commands/skills.js.map +0 -1
- package/dist/cli/commands/sync.js +0 -319
- package/dist/cli/commands/sync.js.map +0 -1
- package/dist/cli/commands/validate-plan.js +0 -42
- package/dist/cli/commands/validate-plan.js.map +0 -1
- package/dist/cli/commands/wave.js +0 -57
- package/dist/cli/commands/wave.js.map +0 -1
- package/dist/cli/copy/auth.json +0 -6
- package/dist/cli/copy/flows.json +0 -6
- package/dist/cli/copy/init.json +0 -20
- package/dist/cli/copy/sync.json +0 -3
- package/dist/cli/copy.js +0 -23
- package/dist/cli/copy.js.map +0 -1
- package/dist/cli/flows/clients.js +0 -130
- package/dist/cli/flows/clients.js.map +0 -1
- package/dist/cli/flows/completion.js +0 -63
- package/dist/cli/flows/completion.js.map +0 -1
- package/dist/cli/flows/dependencies.js +0 -114
- package/dist/cli/flows/dependencies.js.map +0 -1
- package/dist/cli/flows/sections.js +0 -85
- package/dist/cli/flows/sections.js.map +0 -1
- package/dist/cli/flows/user-config.js +0 -37
- package/dist/cli/flows/user-config.js.map +0 -1
- package/dist/cli/ui/render.js +0 -239
- package/dist/cli/ui/render.js.map +0 -1
- package/dist/cli/ui/report.js +0 -130
- package/dist/cli/ui/report.js.map +0 -1
- package/dist/config.js +0 -289
- package/dist/config.js.map +0 -1
- package/dist/constants.js +0 -9
- package/dist/constants.js.map +0 -1
- package/dist/core/ports.js +0 -2
- package/dist/core/ports.js.map +0 -1
- package/dist/core/types.js +0 -5
- package/dist/core/types.js.map +0 -1
- package/dist/database.types.js +0 -11
- package/dist/database.types.js.map +0 -1
- package/dist/lib/active-project.js +0 -28
- package/dist/lib/active-project.js.map +0 -1
- package/dist/lib/autopull.js +0 -13
- package/dist/lib/autopull.js.map +0 -1
- package/dist/lib/boilerplate-scaffold.js +0 -65
- package/dist/lib/boilerplate-scaffold.js.map +0 -1
- package/dist/lib/boilerplates.js +0 -61
- package/dist/lib/boilerplates.js.map +0 -1
- package/dist/lib/calendar-logic.js +0 -59
- package/dist/lib/calendar-logic.js.map +0 -1
- package/dist/lib/calendar-write-logic.js +0 -6
- package/dist/lib/calendar-write-logic.js.map +0 -1
- package/dist/lib/client-configs.js +0 -191
- package/dist/lib/client-configs.js.map +0 -1
- package/dist/lib/client-install.js +0 -40
- package/dist/lib/client-install.js.map +0 -1
- package/dist/lib/colors.js +0 -92
- package/dist/lib/colors.js.map +0 -1
- package/dist/lib/cowork-extension.js +0 -143
- package/dist/lib/cowork-extension.js.map +0 -1
- package/dist/lib/dates.js +0 -21
- package/dist/lib/dates.js.map +0 -1
- package/dist/lib/dependencies.js +0 -145
- package/dist/lib/dependencies.js.map +0 -1
- package/dist/lib/dependency-install.js +0 -163
- package/dist/lib/dependency-install.js.map +0 -1
- package/dist/lib/duration.js +0 -5
- package/dist/lib/duration.js.map +0 -1
- package/dist/lib/exec-delegate.js +0 -218
- package/dist/lib/exec-delegate.js.map +0 -1
- package/dist/lib/exec-engines.js +0 -90
- package/dist/lib/exec-engines.js.map +0 -1
- package/dist/lib/exec-events.js +0 -87
- package/dist/lib/exec-events.js.map +0 -1
- package/dist/lib/exec-translators.js +0 -198
- package/dist/lib/exec-translators.js.map +0 -1
- package/dist/lib/file-merge.js +0 -33
- package/dist/lib/file-merge.js.map +0 -1
- package/dist/lib/git-exposure.js +0 -35
- package/dist/lib/git-exposure.js.map +0 -1
- package/dist/lib/harness.js +0 -127
- package/dist/lib/harness.js.map +0 -1
- package/dist/lib/hooks.js +0 -216
- package/dist/lib/hooks.js.map +0 -1
- package/dist/lib/patterns.js +0 -25
- package/dist/lib/patterns.js.map +0 -1
- package/dist/lib/pg-error.js +0 -53
- package/dist/lib/pg-error.js.map +0 -1
- package/dist/lib/plan-delegate.js +0 -117
- package/dist/lib/plan-delegate.js.map +0 -1
- package/dist/lib/project-context.js +0 -151
- package/dist/lib/project-context.js.map +0 -1
- package/dist/lib/prompts.js +0 -69
- package/dist/lib/prompts.js.map +0 -1
- package/dist/lib/provision-apply.js +0 -220
- package/dist/lib/provision-apply.js.map +0 -1
- package/dist/lib/provision-collect.js +0 -47
- package/dist/lib/provision-collect.js.map +0 -1
- package/dist/lib/provision.js +0 -45
- package/dist/lib/provision.js.map +0 -1
- package/dist/lib/release-logic.js +0 -10
- package/dist/lib/release-logic.js.map +0 -1
- package/dist/lib/repo-map.js +0 -176
- package/dist/lib/repo-map.js.map +0 -1
- package/dist/lib/require-config.js +0 -32
- package/dist/lib/require-config.js.map +0 -1
- package/dist/lib/rules.js +0 -146
- package/dist/lib/rules.js.map +0 -1
- package/dist/lib/sections.js +0 -89
- package/dist/lib/sections.js.map +0 -1
- package/dist/lib/skill-agent.js +0 -44
- package/dist/lib/skill-agent.js.map +0 -1
- package/dist/lib/skill-serve.js +0 -128
- package/dist/lib/skill-serve.js.map +0 -1
- package/dist/lib/skills-cache.js +0 -99
- package/dist/lib/skills-cache.js.map +0 -1
- package/dist/lib/skills.js +0 -237
- package/dist/lib/skills.js.map +0 -1
- package/dist/lib/sprint-deadline.js +0 -28
- package/dist/lib/sprint-deadline.js.map +0 -1
- package/dist/lib/sprint-logic.js +0 -31
- package/dist/lib/sprint-logic.js.map +0 -1
- package/dist/lib/targets.js +0 -150
- package/dist/lib/targets.js.map +0 -1
- package/dist/lib/task-history.js +0 -15
- package/dist/lib/task-history.js.map +0 -1
- package/dist/lib/telemetry.js +0 -51
- package/dist/lib/telemetry.js.map +0 -1
- package/dist/lib/tool-result.js +0 -15
- package/dist/lib/tool-result.js.map +0 -1
- package/dist/lib/validate-plan-delegate.js +0 -106
- package/dist/lib/validate-plan-delegate.js.map +0 -1
- package/dist/lib/version-check.js +0 -89
- package/dist/lib/version-check.js.map +0 -1
- package/dist/lib/wave-scheduler.js +0 -95
- package/dist/lib/wave-scheduler.js.map +0 -1
- package/dist/session-factory.js +0 -19
- package/dist/session-factory.js.map +0 -1
- package/dist/spinner.js +0 -12
- package/dist/spinner.js.map +0 -1
- package/dist/tools/activate-sprint.js +0 -44
- package/dist/tools/activate-sprint.js.map +0 -1
- package/dist/tools/add-checklist.js +0 -63
- package/dist/tools/add-checklist.js.map +0 -1
- package/dist/tools/add-holiday.js +0 -41
- package/dist/tools/add-holiday.js.map +0 -1
- package/dist/tools/add-home-office.js +0 -31
- package/dist/tools/add-home-office.js.map +0 -1
- package/dist/tools/add-vacation.js +0 -39
- package/dist/tools/add-vacation.js.map +0 -1
- package/dist/tools/attach-pr.js +0 -97
- package/dist/tools/attach-pr.js.map +0 -1
- package/dist/tools/comment-task.js +0 -72
- package/dist/tools/comment-task.js.map +0 -1
- package/dist/tools/create-release.js +0 -46
- package/dist/tools/create-release.js.map +0 -1
- package/dist/tools/create-sprint.js +0 -66
- package/dist/tools/create-sprint.js.map +0 -1
- package/dist/tools/create-task.js +0 -174
- package/dist/tools/create-task.js.map +0 -1
- package/dist/tools/delegate-exec.js +0 -63
- package/dist/tools/delegate-exec.js.map +0 -1
- package/dist/tools/end-allocation.js +0 -38
- package/dist/tools/end-allocation.js.map +0 -1
- package/dist/tools/end-sprint.js +0 -37
- package/dist/tools/end-sprint.js.map +0 -1
- package/dist/tools/end-task-allocation.js +0 -60
- package/dist/tools/end-task-allocation.js.map +0 -1
- package/dist/tools/exec-status.js +0 -45
- package/dist/tools/exec-status.js.map +0 -1
- package/dist/tools/finalize-release.js +0 -45
- package/dist/tools/finalize-release.js.map +0 -1
- package/dist/tools/get-active-allocation.js +0 -69
- package/dist/tools/get-active-allocation.js.map +0 -1
- package/dist/tools/get-calendar.js +0 -40
- package/dist/tools/get-calendar.js.map +0 -1
- package/dist/tools/get-context.js +0 -48
- package/dist/tools/get-context.js.map +0 -1
- package/dist/tools/get-sprint.js +0 -38
- package/dist/tools/get-sprint.js.map +0 -1
- package/dist/tools/get-task.js +0 -146
- package/dist/tools/get-task.js.map +0 -1
- package/dist/tools/index.js +0 -84
- package/dist/tools/index.js.map +0 -1
- package/dist/tools/list-my-allocations.js +0 -71
- package/dist/tools/list-my-allocations.js.map +0 -1
- package/dist/tools/list-projects.js +0 -38
- package/dist/tools/list-projects.js.map +0 -1
- package/dist/tools/list-releases.js +0 -32
- package/dist/tools/list-releases.js.map +0 -1
- package/dist/tools/list-sprints.js +0 -30
- package/dist/tools/list-sprints.js.map +0 -1
- package/dist/tools/list-tasks.js +0 -95
- package/dist/tools/list-tasks.js.map +0 -1
- package/dist/tools/move-task.js +0 -82
- package/dist/tools/move-task.js.map +0 -1
- package/dist/tools/plan.js +0 -56
- package/dist/tools/plan.js.map +0 -1
- package/dist/tools/record-delivery.js +0 -100
- package/dist/tools/record-delivery.js.map +0 -1
- package/dist/tools/remove-holiday.js +0 -31
- package/dist/tools/remove-holiday.js.map +0 -1
- package/dist/tools/remove-home-office.js +0 -32
- package/dist/tools/remove-home-office.js.map +0 -1
- package/dist/tools/remove-vacation.js +0 -31
- package/dist/tools/remove-vacation.js.map +0 -1
- package/dist/tools/set-project.js +0 -52
- package/dist/tools/set-project.js.map +0 -1
- package/dist/tools/set-review.js +0 -132
- package/dist/tools/set-review.js.map +0 -1
- package/dist/tools/sprint-common.js +0 -13
- package/dist/tools/sprint-common.js.map +0 -1
- package/dist/tools/start-allocation.js +0 -32
- package/dist/tools/start-allocation.js.map +0 -1
- package/dist/tools/start-task-allocation.js +0 -83
- package/dist/tools/start-task-allocation.js.map +0 -1
- package/dist/tools/update-release.js +0 -58
- package/dist/tools/update-release.js.map +0 -1
- package/dist/tools/update-sprint.js +0 -56
- package/dist/tools/update-sprint.js.map +0 -1
- package/dist/tools/update-task.js +0 -183
- package/dist/tools/update-task.js.map +0 -1
- package/dist/tools/validate-plan.js +0 -58
- package/dist/tools/validate-plan.js.map +0 -1
- package/dist/version.js +0 -16
- package/dist/version.js.map +0 -1
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { brand } from "../../brand.js";
|
|
2
|
-
import { existsSync } from "node:fs";
|
|
3
|
-
import { runExec, getJob } from "../../lib/exec-delegate.js";
|
|
4
|
-
import { ENGINES, DEFAULT_ENGINE, parseEngine, } from "../../lib/exec-engines.js";
|
|
5
|
-
/**
|
|
6
|
-
* Superfície de CLI da delegação headless — o que o noclaf Studio (Tauri) chama.
|
|
7
|
-
* Contrato: **stdout = JSON** (parseável), **stderr = log ao vivo** (streamável).
|
|
8
|
-
* Com `--events`, o stderr passa a ser NDJSON de eventos tipados; o stdout não muda.
|
|
9
|
-
*/
|
|
10
|
-
function emit(payload) {
|
|
11
|
-
process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
|
|
12
|
-
}
|
|
13
|
-
async function execAction(opts) {
|
|
14
|
-
const engine = parseEngine(opts.engine);
|
|
15
|
-
if (!engine) {
|
|
16
|
-
emit({
|
|
17
|
-
error: `engine inválido: ${opts.engine} — suportados: ${ENGINES.join(", ")}`,
|
|
18
|
-
});
|
|
19
|
-
process.exitCode = 1;
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
if (!existsSync(opts.worktree)) {
|
|
23
|
-
emit({ error: `worktree não encontrado: ${opts.worktree}` });
|
|
24
|
-
process.exitCode = 1;
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
const job = await runExec({
|
|
28
|
-
worktree: opts.worktree,
|
|
29
|
-
instruction: opts.instruction,
|
|
30
|
-
engine,
|
|
31
|
-
echo: opts.quiet !== true,
|
|
32
|
-
events: opts.events === true,
|
|
33
|
-
});
|
|
34
|
-
emit(job);
|
|
35
|
-
if (job.state !== "done")
|
|
36
|
-
process.exitCode = 1;
|
|
37
|
-
}
|
|
38
|
-
function registerExec(program) {
|
|
39
|
-
program
|
|
40
|
-
.command("exec")
|
|
41
|
-
.description("Delega a implementação a um agente headless num worktree e aguarda. " +
|
|
42
|
-
"stdout = JSON do resultado; stderr = log ao vivo.")
|
|
43
|
-
.requiredOption("--worktree <path>", "worktree onde implementar (criado pelo /implement)")
|
|
44
|
-
.requiredOption("--instruction <texto>", "o que implementar (ticket + critérios)")
|
|
45
|
-
.option("--engine <engine>", `agente de execução (${ENGINES.join(" | ")})`, DEFAULT_ENGINE)
|
|
46
|
-
.option("--quiet", "não streama o log do agente no stderr")
|
|
47
|
-
.option("--events", "stderr vira stream NDJSON de eventos tipados do run (stdout intocado; ignora --quiet)")
|
|
48
|
-
.action(execAction);
|
|
49
|
-
}
|
|
50
|
-
// Comando separado (não subcomando): opções `required` do pai bloqueariam o parse.
|
|
51
|
-
function registerExecStatus(program) {
|
|
52
|
-
program
|
|
53
|
-
.command("exec-status <jobId>")
|
|
54
|
-
.description(`Estado de um job de execução (\`${brand.name} exec\`), em JSON`)
|
|
55
|
-
.action((jobId) => {
|
|
56
|
-
const job = getJob(jobId);
|
|
57
|
-
if (!job) {
|
|
58
|
-
emit({ error: `job não encontrado: ${jobId}` });
|
|
59
|
-
process.exitCode = 1;
|
|
60
|
-
return;
|
|
61
|
-
}
|
|
62
|
-
emit(job);
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
export function registerExecCommand(program) {
|
|
66
|
-
registerExec(program);
|
|
67
|
-
registerExecStatus(program);
|
|
68
|
-
}
|
|
69
|
-
//# sourceMappingURL=exec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec.js","sourceRoot":"","sources":["../../../src/cli/commands/exec.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import { brand } from "../../../brand.js";
|
|
2
|
-
import { runSkillAgent, skillPrompt } from "../../../lib/skill-agent.js";
|
|
3
|
-
/**
|
|
4
|
-
* Análise/pré-preenchimento do repo no `--apply`: aciona a skill `init-sdd` num
|
|
5
|
-
* agente headless (mesmo spawn do `patterns.ts`). É **pré-preenchimento** — o init
|
|
6
|
-
* já é utilizável sem ela —, então quem chama trata falha como aviso. A saída do
|
|
7
|
-
* agente vai pro **stderr**: o stdout do apply é JSON puro.
|
|
8
|
-
*/
|
|
9
|
-
const SKILL_ID = "init-sdd";
|
|
10
|
-
const FALLBACK_PROMPT = `Faça o scaffold da estrutura de spec-driven dev no repositório atual (\`docs/specs\`, \`docs/bugs\`, \`docs/decisions\`, \`docs/_templates\` e um \`AGENTS.md\` na raiz) de forma idempotente: arquivo que já existe é PULADO, nunca sobrescrito. Depois analise o repo (somente-leitura no código) pra pré-preencher o \`AGENTS.md\` com a stack e as convenções REAIS e semear specs das áreas inacabadas. Não escreva nada fora de \`docs/\` e do \`AGENTS.md\`. Termine com um resumo de created/skipped e PARE.`;
|
|
11
|
-
// A skill abre perguntando (Fase 0) e aqui ninguém responde — a resposta vai dada no prompt.
|
|
12
|
-
const HEADLESS_ANSWER = `IMPORTANTE — você foi disparado por \`${brand.name} init --apply\`, de forma NÃO INTERATIVA: não pergunte nada e não espere resposta nenhuma. Considere a Fase 0 já respondida com **(b) scaffold + análise**, produzindo **stack**, **overview** e **specs** (sem ADRs). Siga o resto exatamente como está escrito e PARE no fim.`;
|
|
13
|
-
/** Prompt = corpo da skill `init-sdd` + a Fase 0 já respondida (headless). */
|
|
14
|
-
export function initAnalysisPrompt() {
|
|
15
|
-
return `${skillPrompt(SKILL_ID, FALLBACK_PROMPT)}\n\n---\n\n${HEADLESS_ANSWER}`;
|
|
16
|
-
}
|
|
17
|
-
/** Aciona o `init-sdd` no `cwd`, com a saída do agente desviada pro stderr. */
|
|
18
|
-
export function runInitAnalysis(cwd) {
|
|
19
|
-
return runSkillAgent(initAnalysisPrompt(), { cwd, stdoutFd: 2 });
|
|
20
|
-
}
|
|
21
|
-
//# sourceMappingURL=analyze-step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/analyze-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,WAAW,EAAqB,MAAM,6BAA6B,CAAC;AAE5F;;;;;GAKG;AAEH,MAAM,QAAQ,GAAG,UAAU,CAAC;AAE5B,MAAM,eAAe,GAAG,sfAAsf,CAAC;AAE/gB,6FAA6F;AAC7F,MAAM,eAAe,GAAG,yCAAyC,KAAK,CAAC,IAAI,iRAAiR,CAAC;AAE7V,8EAA8E;AAC9E,MAAM,UAAU,kBAAkB;IAChC,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,eAAe,CAAC,cAAc,eAAe,EAAE,CAAC;AAClF,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,aAAa,CAAC,kBAAkB,EAAE,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
import { UUID_REGEX } from "../../../config.js";
|
|
2
|
-
const options = (ids) => (ids.length ? ids.join(", ") : "(catálogo vazio)");
|
|
3
|
-
function asRecord(value) {
|
|
4
|
-
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
5
|
-
return null;
|
|
6
|
-
return value;
|
|
7
|
-
}
|
|
8
|
-
/** Campo ausente → `[]`; tipo errado → `null` (o chamador reporta). */
|
|
9
|
-
function asStringArray(value) {
|
|
10
|
-
if (value === undefined || value === null)
|
|
11
|
-
return [];
|
|
12
|
-
if (!Array.isArray(value) || value.some((v) => typeof v !== "string"))
|
|
13
|
-
return null;
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
/** Lista de ids que precisa existir no catálogo; erra por id fora dele. */
|
|
17
|
-
function validateIds(field, value, allowed, errors) {
|
|
18
|
-
const ids = asStringArray(value);
|
|
19
|
-
if (!ids) {
|
|
20
|
-
errors.push(`${field}: esperava uma lista de strings`);
|
|
21
|
-
return [];
|
|
22
|
-
}
|
|
23
|
-
for (const id of ids) {
|
|
24
|
-
if (!allowed.includes(id)) {
|
|
25
|
-
errors.push(`${field}: "${id}" não está no catálogo — use: ${options(allowed)}`);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return ids;
|
|
29
|
-
}
|
|
30
|
-
function validateStacks(value, catalog, errors) {
|
|
31
|
-
const raw = value === undefined || value === null ? {} : asRecord(value);
|
|
32
|
-
if (!raw) {
|
|
33
|
-
errors.push('stacks: esperava um objeto { "área": "stack" }');
|
|
34
|
-
return {};
|
|
35
|
-
}
|
|
36
|
-
const stacks = {};
|
|
37
|
-
for (const [area, stack] of Object.entries(raw)) {
|
|
38
|
-
const known = catalog.stacks.find((s) => s.area === area);
|
|
39
|
-
if (!known) {
|
|
40
|
-
const areas = catalog.stacks.map((s) => s.area);
|
|
41
|
-
errors.push(`stacks: área "${area}" não está no catálogo — use: ${options(areas)}`);
|
|
42
|
-
}
|
|
43
|
-
else if (typeof stack !== "string" || !known.options.includes(stack)) {
|
|
44
|
-
errors.push(`stacks["${area}"]: "${String(stack)}" não é stack dessa área — use: ${options(known.options)}`);
|
|
45
|
-
}
|
|
46
|
-
else {
|
|
47
|
-
stacks[area] = stack;
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
return stacks;
|
|
51
|
-
}
|
|
52
|
-
function validateUuid(field, value, required, errors) {
|
|
53
|
-
if (value === undefined || value === null) {
|
|
54
|
-
if (required)
|
|
55
|
-
errors.push(`${field}: obrigatório — o UUID do projeto`);
|
|
56
|
-
return null;
|
|
57
|
-
}
|
|
58
|
-
const text = typeof value === "string" ? value.trim() : "";
|
|
59
|
-
if (!UUID_REGEX.test(text)) {
|
|
60
|
-
errors.push(`${field}: "${String(value)}" não é um UUID`);
|
|
61
|
-
return null;
|
|
62
|
-
}
|
|
63
|
-
return text;
|
|
64
|
-
}
|
|
65
|
-
function validateIde(value, catalog, errors) {
|
|
66
|
-
const ids = catalog.ide.map((o) => o.id);
|
|
67
|
-
if (typeof value === "string" && ids.includes(value))
|
|
68
|
-
return value;
|
|
69
|
-
errors.push(`ide: "${String(value)}" não está no catálogo — use: ${options(ids)}`);
|
|
70
|
-
return "other";
|
|
71
|
-
}
|
|
72
|
-
/** Id do catálogo → a boilerplate resolvida (repo/ref); ausente/`null` = sem scaffold. */
|
|
73
|
-
function validateBoilerplate(value, catalog, errors) {
|
|
74
|
-
if (value === undefined || value === null)
|
|
75
|
-
return null;
|
|
76
|
-
if (typeof value !== "string") {
|
|
77
|
-
errors.push("boilerplate: esperava uma string (id do catálogo)");
|
|
78
|
-
return null;
|
|
79
|
-
}
|
|
80
|
-
const found = catalog.boilerplates.find((b) => b.id === value);
|
|
81
|
-
if (!found) {
|
|
82
|
-
const ids = options(catalog.boilerplates.map((b) => b.id));
|
|
83
|
-
errors.push(`boilerplate: "${value}" não está no catálogo — confira \`boilerplates[]\`: ${ids}`);
|
|
84
|
-
return null;
|
|
85
|
-
}
|
|
86
|
-
return found;
|
|
87
|
-
}
|
|
88
|
-
function validateAnalyze(value, catalog, errors) {
|
|
89
|
-
if (value === undefined || value === null)
|
|
90
|
-
return catalog.analyze.default;
|
|
91
|
-
if (typeof value !== "boolean") {
|
|
92
|
-
errors.push("analyze: esperava booleano (true/false)");
|
|
93
|
-
return catalog.analyze.default;
|
|
94
|
-
}
|
|
95
|
-
return value;
|
|
96
|
-
}
|
|
97
|
-
/** Respostas cruas + catálogo → respostas normalizadas ou os erros. Pura. */
|
|
98
|
-
export function validateAnswers(raw, catalog) {
|
|
99
|
-
const obj = asRecord(raw);
|
|
100
|
-
if (!obj) {
|
|
101
|
-
return {
|
|
102
|
-
ok: false,
|
|
103
|
-
errors: ["respostas: esperava um objeto JSON { project, roles, stacks, clients, ide }"],
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
const errors = [];
|
|
107
|
-
const answers = {
|
|
108
|
-
project: validateUuid("project", obj.project, true, errors) ?? "",
|
|
109
|
-
repository: validateUuid("repository", obj.repository, false, errors),
|
|
110
|
-
selection: {
|
|
111
|
-
roles: validateIds("roles", obj.roles, catalog.roles.map((r) => r.id), errors),
|
|
112
|
-
stacks: validateStacks(obj.stacks, catalog, errors),
|
|
113
|
-
},
|
|
114
|
-
skills: validateIds("skills", obj.skills, catalog.skills.map((s) => s.id), errors),
|
|
115
|
-
clients: validateIds("clients", obj.clients, catalog.clients.map((c) => c.id), errors),
|
|
116
|
-
ide: validateIde(obj.ide, catalog, errors),
|
|
117
|
-
analyze: validateAnalyze(obj.analyze, catalog, errors),
|
|
118
|
-
boilerplate: validateBoilerplate(obj.boilerplate, catalog, errors),
|
|
119
|
-
};
|
|
120
|
-
return errors.length > 0 ? { ok: false, errors } : { ok: true, answers };
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=apply-answers.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-answers.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/apply-answers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { brand, envName } from "../../../brand.js";
|
|
2
|
-
import { section } from "../../../lib/colors.js";
|
|
3
|
-
import { loadCredentials } from "../../../auth.js";
|
|
4
|
-
import { readDependencies, skillIdMap } from "../../../lib/skills.js";
|
|
5
|
-
import { collectRuleSkills } from "../../../lib/rules.js";
|
|
6
|
-
import { flushTelemetry } from "../../../lib/telemetry.js";
|
|
7
|
-
import { createAuthenticatedClient, } from "../../../adapters/supabase/client.js";
|
|
8
|
-
import { offerDependencyInstall, offerRuleSkills } from "../../flows/dependencies.js";
|
|
9
|
-
import { SyncReport, renderReport } from "../../ui/report.js";
|
|
10
|
-
import { buildBaseConfig } from "./project-step.js";
|
|
11
|
-
import { persistConfigStep, loadProjectContext, buildHarness } from "./context-step.js";
|
|
12
|
-
import { installClients, activateCoworkIfChosen, resolveChosenClientIds, ensureChosenClientsInstalled, } from "./clients-step.js";
|
|
13
|
-
import { resolveProvisionTargets, fetchSkillsStep, provisionTargetsStep, provisionHooksStep, } from "./provision-step.js";
|
|
14
|
-
import { buildCatalog, readCatalogSources } from "./describe-step.js";
|
|
15
|
-
import { validateAnswers } from "./apply-answers.js";
|
|
16
|
-
import { applyBoilerplateScaffold } from "./boilerplate-step.js";
|
|
17
|
-
import { runInitStep, redirectStdoutToStderr, emitResult } from "./progress.js";
|
|
18
|
-
import { runInitAnalysis } from "./analyze-step.js";
|
|
19
|
-
function fail(errors) {
|
|
20
|
-
console.error("[erro] respostas do --apply inválidas:");
|
|
21
|
-
for (const err of errors)
|
|
22
|
-
console.error(` - ${err}`);
|
|
23
|
-
console.error(` rode \`${brand.name} init --describe\` pra ver o catálogo válido.`);
|
|
24
|
-
emitResult({
|
|
25
|
-
ok: false,
|
|
26
|
-
harnessWritten: false,
|
|
27
|
-
skills: [],
|
|
28
|
-
clients: [],
|
|
29
|
-
sections: [],
|
|
30
|
-
error: "respostas do --apply inválidas",
|
|
31
|
-
errors,
|
|
32
|
-
});
|
|
33
|
-
process.exit(1);
|
|
34
|
-
}
|
|
35
|
-
/** JSON cru → respostas validadas contra o catálogo; erro acionável + exit 1 se não bate. */
|
|
36
|
-
export function parseApplyAnswers(json) {
|
|
37
|
-
let raw;
|
|
38
|
-
try {
|
|
39
|
-
raw = JSON.parse(json);
|
|
40
|
-
}
|
|
41
|
-
catch (err) {
|
|
42
|
-
fail([`--apply: JSON inválido (${err.message})`]);
|
|
43
|
-
}
|
|
44
|
-
const result = validateAnswers(raw, buildCatalog(readCatalogSources()));
|
|
45
|
-
if (!result.ok)
|
|
46
|
-
fail(result.errors);
|
|
47
|
-
return result.answers;
|
|
48
|
-
}
|
|
49
|
-
/** Auth assumida: o headless nunca prompta PAT — sem credencial salva, falha acionável. */
|
|
50
|
-
async function requireCredentials() {
|
|
51
|
-
if (await loadCredentials())
|
|
52
|
-
return;
|
|
53
|
-
throw new Error(`sem sessão do ${brand.productName} nesta máquina — o init headless não pede PAT. ` +
|
|
54
|
-
`Conecte a conta no Studio, ou rode \`${brand.name} login <PAT>\`, ou passe o PAT ` +
|
|
55
|
-
`em ${envName("PAT")} no ambiente; depois repita o \`${brand.name} init --apply\`.`);
|
|
56
|
-
}
|
|
57
|
-
/** Sessão + config no disco + contexto, com projeto/repo/seleção/IDE vindos do JSON. */
|
|
58
|
-
async function applyProjectSetup(answers) {
|
|
59
|
-
const session = await runInitStep("session", "Carregando a sessão", () => createAuthenticatedClient());
|
|
60
|
-
const config = buildBaseConfig(answers.project, answers.repository);
|
|
61
|
-
config.selection = answers.selection;
|
|
62
|
-
config.ide = answers.ide;
|
|
63
|
-
await runInitStep("config", `Gravando ${brand.projectConfigFile}`, () => persistConfigStep(config, answers.project));
|
|
64
|
-
const { overview } = await runInitStep("context", "Carregando o contexto do projeto", () => loadProjectContext(session.supabase, config, session.user));
|
|
65
|
-
return { config, session, overview };
|
|
66
|
-
}
|
|
67
|
-
/** Instala os clientes escolhidos e provisiona skills/commands/hooks — tudo sem prompt. */
|
|
68
|
-
async function applyClientsAndProvision(config, session, clients, report) {
|
|
69
|
-
await runInitStep("clients", "Instalando os clientes escolhidos", async () => {
|
|
70
|
-
installClients(clients, process.cwd());
|
|
71
|
-
await activateCoworkIfChosen(clients, { interactive: false });
|
|
72
|
-
await ensureChosenClientsInstalled(resolveChosenClientIds(clients), { interactive: false });
|
|
73
|
-
});
|
|
74
|
-
await runInitStep("provision", "Provisionando skills, commands e hooks", () => {
|
|
75
|
-
const targets = resolveProvisionTargets(clients);
|
|
76
|
-
section("Skills & commands", "provisionando pros clientes");
|
|
77
|
-
provisionTargetsStep(targets, config, session, skillIdMap(), report);
|
|
78
|
-
provisionHooksStep(targets, config, report);
|
|
79
|
-
renderReport(report, "plain");
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
/** Hints de libs/skills recomendadas (sem prompt) + telemetria — nada aqui aborta. */
|
|
83
|
-
async function applyFollowUps(config) {
|
|
84
|
-
const selection = config.selection ?? { roles: [], stacks: {} };
|
|
85
|
-
await runInitStep("dependencies", "Conferindo dependências e skills recomendadas", async () => {
|
|
86
|
-
await offerDependencyInstall(readDependencies(selection), { interactive: false });
|
|
87
|
-
await offerRuleSkills(collectRuleSkills(selection), { interactive: false });
|
|
88
|
-
});
|
|
89
|
-
try {
|
|
90
|
-
await flushTelemetry();
|
|
91
|
-
}
|
|
92
|
-
catch {
|
|
93
|
-
/* telemetria é best-effort — não derruba o init */
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Aciona o `init-sdd`. Pré-preenchimento é conveniência: falta de `claude`/`codex` ou
|
|
98
|
-
* agente que falhou emite `error` no NDJSON (o modal marca a etapa) mas **não** aborta
|
|
99
|
-
* — o init já está utilizável, e o estado fica em `analysis` no resultado (exit 0).
|
|
100
|
-
*/
|
|
101
|
-
async function applyAnalysis(result) {
|
|
102
|
-
try {
|
|
103
|
-
await runInitStep("analyze", "Analisando o repo pra pré-preencher (init-sdd)", () => {
|
|
104
|
-
const outcome = runInitAnalysis(process.cwd());
|
|
105
|
-
result.analysis = outcome;
|
|
106
|
-
if (!outcome.ran)
|
|
107
|
-
throw new Error(outcome.reason ?? "análise não rodou");
|
|
108
|
-
if (!outcome.ok)
|
|
109
|
-
throw new Error(`a análise falhou no agente \`${outcome.agent}\``);
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
/* já emitido como `error`; o apply segue e sai 0 */
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
/** As seções sem o detalhe: o resultado leva status/resumo, não a saída humana. */
|
|
117
|
-
function summarize(sections) {
|
|
118
|
-
return sections.map(({ id, title, status, summary }) => ({ id, title, status, summary }));
|
|
119
|
-
}
|
|
120
|
-
/** Preenche o resultado à medida que as etapas passam — em falha ele já reflete o quanto rodou. */
|
|
121
|
-
async function runApplySteps(answers, result) {
|
|
122
|
-
await runInitStep("auth", "Conferindo a sessão salva", requireCredentials);
|
|
123
|
-
// Roda só depois do auth, pra um apply sem credencial não deixar a pasta clonada pra trás.
|
|
124
|
-
await applyBoilerplateScaffold(answers.boilerplate, process.cwd());
|
|
125
|
-
const { config, session, overview } = await applyProjectSetup(answers);
|
|
126
|
-
// O harness sai das rules do pacote de skills: em máquina nova o cache tem que vir antes.
|
|
127
|
-
const report = new SyncReport();
|
|
128
|
-
await runInitStep("skills", "Baixando as skills do repo", () => fetchSkillsStep(report));
|
|
129
|
-
result.sections = summarize(report.sections); // se o harness falhar, a seção do fetch explica
|
|
130
|
-
result.harness = await runInitStep("harness", "Escrevendo o harness no repo", () => buildHarness(config, overview));
|
|
131
|
-
result.harnessWritten = true;
|
|
132
|
-
await applyClientsAndProvision(config, session, answers.clients, report);
|
|
133
|
-
result.sections = summarize(report.sections);
|
|
134
|
-
// Depois do provisionamento: o `init-sdd` lê os templates que ele acabou de instalar.
|
|
135
|
-
if (answers.analyze)
|
|
136
|
-
await applyAnalysis(result);
|
|
137
|
-
await applyFollowUps(config);
|
|
138
|
-
}
|
|
139
|
-
export async function applyInit(json, analyzeFlag) {
|
|
140
|
-
const parsed = parseApplyAnswers(json);
|
|
141
|
-
// Precedência: `--no-analyze` na linha de comando ganha do `analyze` do JSON.
|
|
142
|
-
const answers = { ...parsed, analyze: analyzeFlag ?? parsed.analyze };
|
|
143
|
-
const result = {
|
|
144
|
-
ok: false,
|
|
145
|
-
harnessWritten: false,
|
|
146
|
-
skills: answers.skills,
|
|
147
|
-
clients: answers.clients,
|
|
148
|
-
sections: [],
|
|
149
|
-
};
|
|
150
|
-
const restoreStdout = redirectStdoutToStderr();
|
|
151
|
-
try {
|
|
152
|
-
await runApplySteps(answers, result);
|
|
153
|
-
result.ok = true;
|
|
154
|
-
}
|
|
155
|
-
catch (err) {
|
|
156
|
-
result.error = err.message;
|
|
157
|
-
}
|
|
158
|
-
finally {
|
|
159
|
-
restoreStdout();
|
|
160
|
-
}
|
|
161
|
-
emitResult(result);
|
|
162
|
-
if (!result.ok)
|
|
163
|
-
process.exit(1);
|
|
164
|
-
}
|
|
165
|
-
//# sourceMappingURL=apply-step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"apply-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/apply-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,OAAO,EACL,yBAAyB,GAE1B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAE,UAAU,EAAE,YAAY,EAAoB,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACxF,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,4BAA4B,GAE7B,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,eAAe,EACf,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,eAAe,EAAqB,MAAM,oBAAoB,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,WAAW,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA+BpD,SAAS,IAAI,CAAC,MAAgB;IAC5B,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACxD,KAAK,MAAM,GAAG,IAAI,MAAM;QAAE,OAAO,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,KAAK,CAAC,YAAY,KAAK,CAAC,IAAI,+CAA+C,CAAC,CAAC;IACrF,UAAU,CAAC;QACT,EAAE,EAAE,KAAK;QACT,cAAc,EAAE,KAAK;QACrB,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,gCAAgC;QACvC,MAAM;KACe,CAAC,CAAC;IACzB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,6FAA6F;AAC7F,MAAM,UAAU,iBAAiB,CAAC,IAAY;IAC5C,IAAI,GAAY,CAAC;IACjB,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,CAAC,2BAA4B,GAAa,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;IAC/D,CAAC;IACD,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,EAAE,YAAY,CAAC,kBAAkB,EAAE,CAAC,CAAC,CAAC;IACxE,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,OAAO,MAAM,CAAC,OAAO,CAAC;AACxB,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,kBAAkB;IAC/B,IAAI,MAAM,eAAe,EAAE;QAAE,OAAO;IACpC,MAAM,IAAI,KAAK,CACb,iBAAiB,KAAK,CAAC,WAAW,iDAAiD;QACjF,wCAAwC,KAAK,CAAC,IAAI,iCAAiC;QACnF,MAAM,OAAO,CAAC,KAAK,CAAC,mCAAmC,KAAK,CAAC,IAAI,kBAAkB,CACtF,CAAC;AACJ,CAAC;AAED,wFAAwF;AACxF,KAAK,UAAU,iBAAiB,CAAC,OAAqB;IAKpD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,qBAAqB,EAAE,GAAG,EAAE,CACvE,yBAAyB,EAAE,CAC5B,CAAC;IACF,MAAM,MAAM,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,CAAC;IACpE,MAAM,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IACrC,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;IAEzB,MAAM,WAAW,CAAC,QAAQ,EAAE,YAAY,KAAK,CAAC,iBAAiB,EAAE,EAAE,GAAG,EAAE,CACtE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAC3C,CAAC;IACF,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,kCAAkC,EAAE,GAAG,EAAE,CACzF,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,CAC3D,CAAC;IAEF,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AACvC,CAAC;AAED,2FAA2F;AAC3F,KAAK,UAAU,wBAAwB,CACrC,MAAqB,EACrB,OAA6B,EAC7B,OAAuB,EACvB,MAAkB;IAElB,MAAM,WAAW,CAAC,SAAS,EAAE,mCAAmC,EAAE,KAAK,IAAI,EAAE;QAC3E,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACvC,MAAM,sBAAsB,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9D,MAAM,4BAA4B,CAAC,sBAAsB,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IAEH,MAAM,WAAW,CAAC,WAAW,EAAE,wCAAwC,EAAE,GAAG,EAAE;QAC5E,MAAM,OAAO,GAAG,uBAAuB,CAAC,OAAO,CAAC,CAAC;QACjD,OAAO,CAAC,mBAAmB,EAAE,6BAA6B,CAAC,CAAC;QAC5D,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,MAAM,CAAC,CAAC;QACrE,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC5C,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,sFAAsF;AACtF,KAAK,UAAU,cAAc,CAAC,MAAqB;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IAChE,MAAM,WAAW,CAAC,cAAc,EAAE,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,sBAAsB,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QAClF,MAAM,eAAe,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,cAAc,EAAE,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAAC,MAAmB;IAC9C,IAAI,CAAC;QACH,MAAM,WAAW,CAAC,SAAS,EAAE,gDAAgD,EAAE,GAAG,EAAE;YAClF,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,QAAQ,GAAG,OAAO,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,GAAG;gBAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,IAAI,mBAAmB,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;QACtF,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,oDAAoD;IACtD,CAAC;AACH,CAAC;AAED,mFAAmF;AACnF,SAAS,SAAS,CAAC,QAAuB;IACxC,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC;AAC5F,CAAC;AAED,mGAAmG;AACnG,KAAK,UAAU,aAAa,CAAC,OAAqB,EAAE,MAAmB;IACrE,MAAM,WAAW,CAAC,MAAM,EAAE,2BAA2B,EAAE,kBAAkB,CAAC,CAAC;IAC3E,2FAA2F;IAC3F,MAAM,wBAAwB,CAAC,OAAO,CAAC,WAAW,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEnE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,iBAAiB,CAAC,OAAO,CAAC,CAAC;IAEvE,0FAA0F;IAC1F,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;IAChC,MAAM,WAAW,CAAC,QAAQ,EAAE,4BAA4B,EAAE,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;IACzF,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,gDAAgD;IAC9F,MAAM,CAAC,OAAO,GAAG,MAAM,WAAW,CAAC,SAAS,EAAE,8BAA8B,EAAE,GAAG,EAAE,CACjF,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAC/B,CAAC;IACF,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC;IAE7B,MAAM,wBAAwB,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACzE,MAAM,CAAC,QAAQ,GAAG,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7C,sFAAsF;IACtF,IAAI,OAAO,CAAC,OAAO;QAAE,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAY,EAAE,WAAqB;IACjE,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACvC,8EAA8E;IAC9E,MAAM,OAAO,GAAiB,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,WAAW,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;IACpF,MAAM,MAAM,GAAgB;QAC1B,EAAE,EAAE,KAAK;QACT,cAAc,EAAE,KAAK;QACrB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,EAAE;KACb,CAAC;IAEF,MAAM,aAAa,GAAG,sBAAsB,EAAE,CAAC;IAC/C,IAAI,CAAC;QACH,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACrC,MAAM,CAAC,EAAE,GAAG,IAAI,CAAC;IACnB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,KAAK,GAAI,GAAa,CAAC,OAAO,CAAC;IACxC,CAAC;YAAS,CAAC;QACT,aAAa,EAAE,CAAC;IAClB,CAAC;IAED,UAAU,CAAC,MAAM,CAAC,CAAC;IACnB,IAAI,CAAC,MAAM,CAAC,EAAE;QAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { password } from "../../../lib/prompts.js";
|
|
2
|
-
import { brand } from "../../../brand.js";
|
|
3
|
-
import { exchangePatForJwt, loadCredentials, saveCredentials, validatePatFormat, } from "../../../auth.js";
|
|
4
|
-
import { createAuthenticatedClient } from "../../../adapters/supabase/client.js";
|
|
5
|
-
import { startSpinner } from "../../../spinner.js";
|
|
6
|
-
import { initCopy } from "../../copy.js";
|
|
7
|
-
/**
|
|
8
|
-
* Garante que há credenciais locais antes de seguir com o wizard: se já há PAT
|
|
9
|
-
* salvo, não faz nada; senão, pede o token, valida e troca por sessão.
|
|
10
|
-
*/
|
|
11
|
-
export async function ensureAuthenticated() {
|
|
12
|
-
const existingCreds = await loadCredentials();
|
|
13
|
-
if (existingCreds)
|
|
14
|
-
return;
|
|
15
|
-
console.log("Você ainda não está autenticado.");
|
|
16
|
-
console.log(`Gere um token pessoal em: ${brand.webUrl}/profile#mcp`);
|
|
17
|
-
const newPat = (await password({
|
|
18
|
-
message: initCopy.patPrompt,
|
|
19
|
-
mask: "*",
|
|
20
|
-
validate: (value) => validatePatFormat(value.trim()) || initCopy.patInvalid,
|
|
21
|
-
})).trim();
|
|
22
|
-
const loginSpinner = startSpinner("Validando token...");
|
|
23
|
-
try {
|
|
24
|
-
const result = await exchangePatForJwt(newPat);
|
|
25
|
-
await saveCredentials({ pat: newPat });
|
|
26
|
-
loginSpinner.stop();
|
|
27
|
-
const displayName = result.user.full_name || result.user.email;
|
|
28
|
-
console.log(`[ok] Autenticado como ${displayName}`);
|
|
29
|
-
}
|
|
30
|
-
catch (err) {
|
|
31
|
-
loginSpinner.fail(`Falha ao autenticar: ${err.message}`);
|
|
32
|
-
process.exit(1);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
/** Cria a sessão autenticada (client Supabase + user) usada pelo resto do wizard. */
|
|
36
|
-
export async function createSessionStep() {
|
|
37
|
-
const authSpinner = startSpinner("Carregando sessão...");
|
|
38
|
-
try {
|
|
39
|
-
const session = await createAuthenticatedClient();
|
|
40
|
-
authSpinner.stop();
|
|
41
|
-
return session;
|
|
42
|
-
}
|
|
43
|
-
catch (err) {
|
|
44
|
-
authSpinner.fail(err.message);
|
|
45
|
-
process.exit(1);
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
//# sourceMappingURL=auth-step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"auth-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/auth-step.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,yBAAyB,EAA6B,MAAM,sCAAsC,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB;IACvC,MAAM,aAAa,GAAG,MAAM,eAAe,EAAE,CAAC;IAC9C,IAAI,aAAa;QAAE,OAAO;IAE1B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,6BAA6B,KAAK,CAAC,MAAM,cAAc,CAAC,CAAC;IACrE,MAAM,MAAM,GAAG,CACb,MAAM,QAAQ,CAAC;QACb,OAAO,EAAE,QAAQ,CAAC,SAAS;QAC3B,IAAI,EAAE,GAAG;QACT,QAAQ,EAAE,CAAC,KAAK,EAAE,EAAE,CAClB,iBAAiB,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,UAAU;KACzD,CAAC,CACH,CAAC,IAAI,EAAE,CAAC;IAET,MAAM,YAAY,GAAG,YAAY,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,eAAe,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,CAAC;QACvC,YAAY,CAAC,IAAI,EAAE,CAAC;QACpB,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,EAAE,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,YAAY,CAAC,IAAI,CAAC,wBAAyB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,qFAAqF;AACrF,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,MAAM,WAAW,GAAG,YAAY,CAAC,sBAAsB,CAAC,CAAC;IACzD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,yBAAyB,EAAE,CAAC;QAClD,WAAW,CAAC,IAAI,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,WAAW,CAAC,IAAI,CAAE,GAAa,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import { cloneBoilerplate, destIsEmptyForScaffold, detachGit, } from "../../../lib/boilerplate-scaffold.js";
|
|
2
|
-
import { runInitStep } from "./progress.js";
|
|
3
|
-
/**
|
|
4
|
-
* `boilerplate` do `--apply`: clona o repo do catálogo pro dest e desliga o `.git`
|
|
5
|
-
* dele — roda entre `auth` e `applyProjectSetup`, antes do harness/skills, que
|
|
6
|
-
* escrevem por cima. `null` (nenhuma boilerplate escolhida) é um no-op, sem fase
|
|
7
|
-
* emitida — sem checagem de pasta.
|
|
8
|
-
*/
|
|
9
|
-
export async function applyBoilerplateScaffold(boilerplate, dest) {
|
|
10
|
-
if (!boilerplate)
|
|
11
|
-
return;
|
|
12
|
-
await runInitStep("boilerplate-clone", `Clonando o boilerplate ${boilerplate.id}`, () => {
|
|
13
|
-
if (!destIsEmptyForScaffold(dest)) {
|
|
14
|
-
throw new Error("boilerplate: o destino precisa estar vazio pra clonar — nada foi escrito.");
|
|
15
|
-
}
|
|
16
|
-
cloneBoilerplate(boilerplate.repo, boilerplate.ref, dest);
|
|
17
|
-
});
|
|
18
|
-
await runInitStep("boilerplate-detach", "Reiniciando o git no boilerplate", () => detachGit(dest));
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=boilerplate-step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"boilerplate-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/boilerplate-step.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,sBAAsB,EACtB,SAAS,GACV,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,WAAsC,EACtC,IAAY;IAEZ,IAAI,CAAC,WAAW;QAAE,OAAO;IAEzB,MAAM,WAAW,CAAC,mBAAmB,EAAE,0BAA0B,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE;QACtF,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QACD,gBAAgB,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,CAAC,oBAAoB,EAAE,kCAAkC,EAAE,GAAG,EAAE,CAC/E,SAAS,CAAC,IAAI,CAAC,CAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
import { checkbox } from "../../../lib/prompts.js";
|
|
2
|
-
import { section } from "../../../lib/colors.js";
|
|
3
|
-
import { CLIENTS } from "../../../lib/client-install.js";
|
|
4
|
-
import { installClaudeCodeGlobal, installClaudeCodeRepo, installCodexGlobal, installVSCodeRepo, } from "../../../lib/client-configs.js";
|
|
5
|
-
import { printInstallResult } from "../../ui/render.js";
|
|
6
|
-
import { ensureClientInstalled, activateCowork } from "../../flows/clients.js";
|
|
7
|
-
import { initCopy } from "../../copy.js";
|
|
8
|
-
/** Rótulo + rotina de instalação de cada escolha do checkbox (exceto `cowork`,
|
|
9
|
-
* que tem ativação assíncrona própria — ver `activateCoworkIfChosen`). */
|
|
10
|
-
export const CLIENT_INSTALLERS = {
|
|
11
|
-
"claude-code-global": { label: "Claude Code (global)", run: () => installClaudeCodeGlobal() },
|
|
12
|
-
"codex-global": { label: "Codex CLI (global)", run: () => installCodexGlobal() },
|
|
13
|
-
"claude-code-repo": { label: "Claude Code (per-repo)", run: (cwd) => installClaudeCodeRepo(cwd) },
|
|
14
|
-
"vscode-repo": { label: "VS Code Copilot (per-repo)", run: (cwd) => installVSCodeRepo(cwd) },
|
|
15
|
-
};
|
|
16
|
-
/** Clientes oferecidos — fonte única do prompt interativo e do catálogo do `--describe`. */
|
|
17
|
-
export const CLIENT_CHOICES = [
|
|
18
|
-
{ name: initCopy.clientChoices.claudeGlobal, value: "claude-code-global" },
|
|
19
|
-
{ name: initCopy.clientChoices.codexGlobal, value: "codex-global" },
|
|
20
|
-
{ name: initCopy.clientChoices.cowork, value: "cowork" },
|
|
21
|
-
{ name: initCopy.clientChoices.claudeRepo, value: "claude-code-repo" },
|
|
22
|
-
{ name: initCopy.clientChoices.vscodeRepo, value: "vscode-repo" },
|
|
23
|
-
];
|
|
24
|
-
export async function promptClientChoices() {
|
|
25
|
-
return checkbox({
|
|
26
|
-
message: initCopy.clientsPrompt,
|
|
27
|
-
all: true,
|
|
28
|
-
choices: CLIENT_CHOICES,
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
/** Roda a instalação de cada cliente escolhido (exceto `cowork`, tratado à parte). */
|
|
32
|
-
export function installClients(clientConfigs, cwd) {
|
|
33
|
-
for (const choice of clientConfigs) {
|
|
34
|
-
if (choice === "cowork")
|
|
35
|
-
continue; // ativação async + fallback, tratada abaixo
|
|
36
|
-
const installer = CLIENT_INSTALLERS[choice];
|
|
37
|
-
try {
|
|
38
|
-
printInstallResult(installer.label, installer.run(cwd));
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
console.error(`[erro] Falha ao configurar ${choice}: ${err.message}`);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
export async function activateCoworkIfChosen(clientConfigs, opts = { interactive: true }) {
|
|
46
|
-
if (!clientConfigs.includes("cowork"))
|
|
47
|
-
return;
|
|
48
|
-
console.log("");
|
|
49
|
-
section("Claude Desktop / Cowork");
|
|
50
|
-
await activateCowork(opts);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Dado o resultado do checkbox de clientes, quais IDs (`CLIENTS[id]`) devem
|
|
54
|
-
* ser conferidos como instalados — várias escolhas do mesmo cliente colapsam
|
|
55
|
-
* num id só (ex.: claude-code-global e claude-code-repo → "claude-code").
|
|
56
|
-
*/
|
|
57
|
-
export function resolveChosenClientIds(clientConfigs) {
|
|
58
|
-
const ids = new Set();
|
|
59
|
-
for (const choice of clientConfigs) {
|
|
60
|
-
if (choice.startsWith("claude-code"))
|
|
61
|
-
ids.add("claude-code");
|
|
62
|
-
if (choice === "codex-global")
|
|
63
|
-
ids.add("codex");
|
|
64
|
-
if (choice === "vscode-repo")
|
|
65
|
-
ids.add("vscode");
|
|
66
|
-
}
|
|
67
|
-
return ids;
|
|
68
|
-
}
|
|
69
|
-
export async function ensureChosenClientsInstalled(chosenClientIds, opts = { interactive: true }) {
|
|
70
|
-
if (chosenClientIds.size === 0)
|
|
71
|
-
return;
|
|
72
|
-
console.log("");
|
|
73
|
-
section("Clientes", "confirmando que estão instalados");
|
|
74
|
-
for (const id of chosenClientIds) {
|
|
75
|
-
await ensureClientInstalled(CLIENTS[id], opts);
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=clients-step.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"clients-step.js","sourceRoot":"","sources":["../../../../src/cli/commands/init/clients-step.ts"],"names":[],"mappings":"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"}
|