@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
package/dist/lib/dependencies.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
import { join } from 'node:path';
|
|
2
|
-
import { homePath } from '../brand.js';
|
|
3
|
-
/**
|
|
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.
|
|
7
|
-
*/
|
|
8
|
-
/** Nome de pacote npm (com escopo opcional). Sem espaços/metacaracteres de shell. */
|
|
9
|
-
const NPM_NAME_RE = /^(?:@[a-z0-9-][a-z0-9-._]*\/)?[a-z0-9-][a-z0-9-._]*$/i;
|
|
10
|
-
/** Só clones https do GitHub. */
|
|
11
|
-
const GIT_URL_RE = /^https:\/\/github\.com\/[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+(?:\.git)?$/;
|
|
12
|
-
/** Slug pro `npx skills add`: `owner/repo` ou `owner/repo/skill` (skill específica). */
|
|
13
|
-
const SKILLS_REPO_RE = /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+(?:\/[A-Za-z0-9._-]+)?$/;
|
|
14
|
-
/** Id de plugin do Claude Code: `plugin@marketplace`. */
|
|
15
|
-
const PLUGIN_ID_RE = /^[A-Za-z0-9._-]+@[A-Za-z0-9._-]+$/;
|
|
16
|
-
/** Onde clonamos deps do tipo `git` (`~/.noclaf/deps/<id>`). */
|
|
17
|
-
function depsDir() {
|
|
18
|
-
return homePath('deps');
|
|
19
|
-
}
|
|
20
|
-
/** Plano `skills` (skills.sh) a partir de um slug validado, ou `null` se inválido. */
|
|
21
|
-
export function skillsInstallPlan(slug) {
|
|
22
|
-
const s = slug.trim();
|
|
23
|
-
if (!SKILLS_REPO_RE.test(s))
|
|
24
|
-
return null;
|
|
25
|
-
return {
|
|
26
|
-
kind: 'skills',
|
|
27
|
-
repo: s,
|
|
28
|
-
program: 'npx',
|
|
29
|
-
args: ['--yes', 'skills', 'add', s],
|
|
30
|
-
command: `npx --yes skills add ${s}`,
|
|
31
|
-
};
|
|
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
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Resolve um doc `dependency` num plano de instalação a partir de campos
|
|
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).
|
|
101
|
-
*/
|
|
102
|
-
export function resolveDependency(node) {
|
|
103
|
-
const fm = node.frontmatter;
|
|
104
|
-
const base = {
|
|
105
|
-
id: node.id,
|
|
106
|
-
title: node.title,
|
|
107
|
-
description: node.description || fm.description || undefined,
|
|
108
|
-
repo: fm.repo || fm.homepage || undefined,
|
|
109
|
-
displayInstall: fm.install || undefined,
|
|
110
|
-
detect: parseDetect(fm.detect),
|
|
111
|
-
manual: fm.manual?.trim() || undefined,
|
|
112
|
-
plan: null,
|
|
113
|
-
};
|
|
114
|
-
const npm = fm.npm?.trim();
|
|
115
|
-
if (npm)
|
|
116
|
-
return applyPlanResult(base, resolveNpmPlan(npm));
|
|
117
|
-
const skills = fm.skills?.trim();
|
|
118
|
-
if (skills)
|
|
119
|
-
return applyPlanResult(base, resolveSkillsPlan(skills));
|
|
120
|
-
const git = fm.git?.trim();
|
|
121
|
-
if (git)
|
|
122
|
-
return applyPlanResult(base, resolveGitPlan(git, node.id));
|
|
123
|
-
const claudePlugin = fm['claude-plugin']?.trim();
|
|
124
|
-
if (claudePlugin)
|
|
125
|
-
return applyPlanResult(base, resolveClaudePluginPlan(claudePlugin));
|
|
126
|
-
const manual = fm.manual?.trim();
|
|
127
|
-
if (manual)
|
|
128
|
-
return { ...base, manual, reason: 'instalação manual' };
|
|
129
|
-
return { ...base, reason: 'sem instalador estruturado (npm:/skills:/git:/manual:) — instale manualmente' };
|
|
130
|
-
}
|
|
131
|
-
/** `detect:` cru → lista de globs (separados por vírgula/quebra de linha). */
|
|
132
|
-
function parseDetect(value) {
|
|
133
|
-
if (!value)
|
|
134
|
-
return undefined;
|
|
135
|
-
const list = value
|
|
136
|
-
.split(/[\n,]+/)
|
|
137
|
-
.map((s) => s.trim())
|
|
138
|
-
.filter(Boolean);
|
|
139
|
-
return list.length ? list : undefined;
|
|
140
|
-
}
|
|
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';
|
|
145
|
-
//# sourceMappingURL=dependencies.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/lib/dependencies.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,163 +0,0 @@
|
|
|
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
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dependency-install.js","sourceRoot":"","sources":["../../src/lib/dependency-install.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/duration.js
DELETED
package/dist/lib/duration.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"duration.js","sourceRoot":"","sources":["../../src/lib/duration.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,eAAe,CAAC,KAAa,EAAE,GAAkB;IAC/D,MAAM,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;IACzD,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
import { spawn, spawnSync } from 'node:child_process';
|
|
2
|
-
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
3
|
-
import { join } from 'node:path';
|
|
4
|
-
import { randomUUID } from 'node:crypto';
|
|
5
|
-
import { skillsDir } from './skills.js';
|
|
6
|
-
import { homePath } from '../brand.js';
|
|
7
|
-
import { DEFAULT_ENGINE, engineArgs, engineMissingError, engineTranslator, resolveEngineBin, } from './exec-engines.js';
|
|
8
|
-
import { changedStats, emitEvent, emitRunEvents, logSink, structuredSink, } from './exec-events.js';
|
|
9
|
-
const jobs = new Map();
|
|
10
|
-
function jobsDir() {
|
|
11
|
-
return homePath('exec-jobs');
|
|
12
|
-
}
|
|
13
|
-
function jobPath(id) {
|
|
14
|
-
return join(jobsDir(), `${id}.json`);
|
|
15
|
-
}
|
|
16
|
-
/** Persiste o job — o servidor MCP pode reiniciar entre chamadas. */
|
|
17
|
-
function save(job) {
|
|
18
|
-
jobs.set(job.id, job);
|
|
19
|
-
try {
|
|
20
|
-
mkdirSync(jobsDir(), { recursive: true });
|
|
21
|
-
writeFileSync(jobPath(job.id), JSON.stringify(job, null, 2) + '\n', 'utf8');
|
|
22
|
-
}
|
|
23
|
-
catch {
|
|
24
|
-
/* best-effort */
|
|
25
|
-
}
|
|
26
|
-
return job;
|
|
27
|
-
}
|
|
28
|
-
export function getJob(id) {
|
|
29
|
-
const mem = jobs.get(id);
|
|
30
|
-
if (mem)
|
|
31
|
-
return mem;
|
|
32
|
-
try {
|
|
33
|
-
return JSON.parse(readFileSync(jobPath(id), 'utf8'));
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
return null;
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
/** Preâmbulo que ancora o agente de execução no harness do repo. */
|
|
40
|
-
function buildPrompt(instruction) {
|
|
41
|
-
return [
|
|
42
|
-
'Implemente a tarefa abaixo NESTE worktree.',
|
|
43
|
-
'Antes de codar: leia AGENTS.md, docs/_rules/noclaf.md e docs/_patterns.md e SIGA-OS.',
|
|
44
|
-
'Pra LOCALIZAR código, grepe docs/_map.md — abra só os arquivos que você vai editar.',
|
|
45
|
-
'Regras: mudança mínima; nada de libs/estilos fora do harness.',
|
|
46
|
-
'Limites: arquivo <300 linhas, função <30 linhas, comentário <=1 linha.',
|
|
47
|
-
'Rode lint/build/testes do repo. NÃO commite — deixe o trabalho staged.',
|
|
48
|
-
'',
|
|
49
|
-
instruction,
|
|
50
|
-
].join('\n');
|
|
51
|
-
}
|
|
52
|
-
/** Roda o hook de tamanho (mesma lógica do commit) sobre o que está staged. */
|
|
53
|
-
function checkSize(worktree) {
|
|
54
|
-
let script;
|
|
55
|
-
try {
|
|
56
|
-
script = join(skillsDir(), 'hooks', 'dev', 'check-code-size.py');
|
|
57
|
-
}
|
|
58
|
-
catch {
|
|
59
|
-
return { ok: true, output: 'skills indisponíveis — check pulado' };
|
|
60
|
-
}
|
|
61
|
-
if (!existsSync(script))
|
|
62
|
-
return { ok: true, output: 'check-code-size ausente — pulado' };
|
|
63
|
-
spawnSync('git', ['add', '-A'], { cwd: worktree, stdio: 'ignore' });
|
|
64
|
-
const r = spawnSync('python3', [script], {
|
|
65
|
-
cwd: worktree,
|
|
66
|
-
input: JSON.stringify({ tool_input: { command: 'git commit' } }),
|
|
67
|
-
encoding: 'utf8',
|
|
68
|
-
});
|
|
69
|
-
if (r.error)
|
|
70
|
-
return { ok: true, output: 'python3 ausente — pulado' };
|
|
71
|
-
return { ok: r.status === 0, output: (r.stderr || '').trim() || 'ok' };
|
|
72
|
-
}
|
|
73
|
-
/** Scripts de qualidade que existem no package.json. */
|
|
74
|
-
function npmScripts(worktree) {
|
|
75
|
-
try {
|
|
76
|
-
const pkg = JSON.parse(readFileSync(join(worktree, 'package.json'), 'utf8'));
|
|
77
|
-
return ['lint', 'build', 'test'].filter((s) => pkg.scripts?.[s]);
|
|
78
|
-
}
|
|
79
|
-
catch {
|
|
80
|
-
return [];
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
function runScript(worktree, script) {
|
|
84
|
-
const r = spawnSync('npm', ['run', script, '--silent'], { cwd: worktree, encoding: 'utf8' });
|
|
85
|
-
const out = `${r.stdout ?? ''}${r.stderr ?? ''}`.trim();
|
|
86
|
-
return { ok: !r.error && r.status === 0, output: out.slice(-1500) || 'ok' };
|
|
87
|
-
}
|
|
88
|
-
function changedFiles(worktree) {
|
|
89
|
-
const r = spawnSync('git', ['status', '--porcelain'], { cwd: worktree, encoding: 'utf8' });
|
|
90
|
-
return (r.stdout ?? '')
|
|
91
|
-
.split('\n')
|
|
92
|
-
.map((l) => l.slice(3).trim())
|
|
93
|
-
.filter(Boolean);
|
|
94
|
-
}
|
|
95
|
-
/** Checks determinísticos — sem LLM, pra o Opus não gastar ciclo com o mecânico. */
|
|
96
|
-
function runChecks(worktree) {
|
|
97
|
-
const checks = { size: checkSize(worktree) };
|
|
98
|
-
for (const s of npmScripts(worktree))
|
|
99
|
-
checks[s] = runScript(worktree, s);
|
|
100
|
-
return checks;
|
|
101
|
-
}
|
|
102
|
-
function finish(job) {
|
|
103
|
-
return save({ ...job, finishedAt: new Date().toISOString() });
|
|
104
|
-
}
|
|
105
|
-
/** Sob `--events`, stdout é o stream nativo traduzido e stderr vira `log`; sem ela, tudo é log cru. */
|
|
106
|
-
function outputSinks(job, opts, collect) {
|
|
107
|
-
if (opts.events === true) {
|
|
108
|
-
const stdout = structuredSink(engineTranslator(job.engine), collect);
|
|
109
|
-
return [stdout, logSink(), stdout.tokens];
|
|
110
|
-
}
|
|
111
|
-
const raw = {
|
|
112
|
-
onData: (chunk) => {
|
|
113
|
-
const text = chunk.toString();
|
|
114
|
-
collect(text);
|
|
115
|
-
if (opts.echo)
|
|
116
|
-
process.stderr.write(text); // stdout fica pro JSON final
|
|
117
|
-
},
|
|
118
|
-
flush: () => undefined, // o caminho cru é passthrough: não tem buffer pra esvaziar
|
|
119
|
-
};
|
|
120
|
-
return [raw, raw, { input: 0, output: 0, total: 0 }];
|
|
121
|
-
}
|
|
122
|
-
function complete(job, code, out, opts) {
|
|
123
|
-
const checks = runChecks(job.worktree);
|
|
124
|
-
const state = code === 0 ? 'done' : 'failed';
|
|
125
|
-
const done = finish({
|
|
126
|
-
...job,
|
|
127
|
-
state,
|
|
128
|
-
exitCode: code,
|
|
129
|
-
summary: out.trim().slice(-2000),
|
|
130
|
-
checks,
|
|
131
|
-
changed: changedFiles(job.worktree),
|
|
132
|
-
});
|
|
133
|
-
if (opts.events === true)
|
|
134
|
-
emitRunEvents(checks, changedStats(job.worktree), state);
|
|
135
|
-
return done;
|
|
136
|
-
}
|
|
137
|
-
function failFromSpawn(job, message, opts) {
|
|
138
|
-
if (opts.events === true) {
|
|
139
|
-
emitEvent({ type: 'error', message, recoverable: false });
|
|
140
|
-
emitEvent({ type: 'phase', value: 'failed' });
|
|
141
|
-
}
|
|
142
|
-
return finish({ ...job, state: 'failed', error: message });
|
|
143
|
-
}
|
|
144
|
-
function spawnEngine(job, bin, prompt, opts = {}) {
|
|
145
|
-
const child = spawn(bin, engineArgs(job.engine, prompt, opts.events === true), {
|
|
146
|
-
cwd: job.worktree,
|
|
147
|
-
stdio: ['ignore', 'pipe', 'pipe'],
|
|
148
|
-
});
|
|
149
|
-
if (opts.events === true)
|
|
150
|
-
emitEvent({ type: 'phase', value: 'running' });
|
|
151
|
-
let out = '';
|
|
152
|
-
const [stdoutSink, stderrSink, used] = outputSinks(job, opts, (text) => {
|
|
153
|
-
out += text;
|
|
154
|
-
});
|
|
155
|
-
child.stdout.on('data', stdoutSink.onData);
|
|
156
|
-
child.stderr.on('data', stderrSink.onData);
|
|
157
|
-
// ENOENT dispara `error` **e** `close`: sem a guarda o fecho rodaria duas vezes.
|
|
158
|
-
let settled = false;
|
|
159
|
-
const settle = (finished) => {
|
|
160
|
-
if (settled)
|
|
161
|
-
return;
|
|
162
|
-
settled = true;
|
|
163
|
-
opts.onDone?.(finished);
|
|
164
|
-
};
|
|
165
|
-
child.on('error', (e) => settle(failFromSpawn(job, e.message, opts)));
|
|
166
|
-
child.on('close', (code) => {
|
|
167
|
-
if (settled)
|
|
168
|
-
return;
|
|
169
|
-
stdoutSink.flush();
|
|
170
|
-
stderrSink.flush();
|
|
171
|
-
settle(complete({ ...job, tokens: used.total ? used : undefined }, code, out, opts));
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
function newJob(worktree, engine) {
|
|
175
|
-
return {
|
|
176
|
-
id: randomUUID().slice(0, 8),
|
|
177
|
-
state: 'running',
|
|
178
|
-
worktree,
|
|
179
|
-
engine,
|
|
180
|
-
exitCode: null,
|
|
181
|
-
summary: '',
|
|
182
|
-
checks: {},
|
|
183
|
-
changed: [],
|
|
184
|
-
startedAt: new Date().toISOString(),
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
/** Prepara o job: resolve o binário e persiste. Devolve o job já falho se não achar. */
|
|
188
|
-
function prepare(worktree, engine, events = false) {
|
|
189
|
-
const job = newJob(worktree, engine);
|
|
190
|
-
const bin = resolveEngineBin(engine);
|
|
191
|
-
if (!bin) {
|
|
192
|
-
return failFromSpawn(job, engineMissingError(engine), { events });
|
|
193
|
-
}
|
|
194
|
-
return { job, bin: save(job) && bin };
|
|
195
|
-
}
|
|
196
|
-
/** Background: devolve na hora (uso do MCP, que é processo longo). */
|
|
197
|
-
export function startExec(opts) {
|
|
198
|
-
const p = prepare(opts.worktree, opts.engine ?? DEFAULT_ENGINE);
|
|
199
|
-
if ('state' in p)
|
|
200
|
-
return p;
|
|
201
|
-
spawnEngine(p.job, p.bin, buildPrompt(opts.instruction), { onDone: () => undefined });
|
|
202
|
-
return p.job;
|
|
203
|
-
}
|
|
204
|
-
/** Bloqueante: aguarda o fim (uso do CLI, que é processo curto). `echo` streama pro stderr. */
|
|
205
|
-
export function runExec(opts) {
|
|
206
|
-
return new Promise((resolve) => {
|
|
207
|
-
const events = opts.events === true;
|
|
208
|
-
const p = prepare(opts.worktree, opts.engine ?? DEFAULT_ENGINE, events);
|
|
209
|
-
if ('state' in p)
|
|
210
|
-
return resolve(p);
|
|
211
|
-
spawnEngine(p.job, p.bin, buildPrompt(opts.instruction), {
|
|
212
|
-
echo: opts.echo,
|
|
213
|
-
events,
|
|
214
|
-
onDone: resolve,
|
|
215
|
-
});
|
|
216
|
-
});
|
|
217
|
-
}
|
|
218
|
-
//# sourceMappingURL=exec-delegate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../src/lib/exec-delegate.ts"],"names":[],"mappings":"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"}
|