@nio-cli/cli 0.3.7 → 0.6.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.
Files changed (163) hide show
  1. package/.env.example +88 -12
  2. package/Dockerfile.gateway +13 -5
  3. package/README.md +186 -78
  4. package/dist/adapters/lang/vendor.js +5 -10
  5. package/dist/adapters/lang/vendor.js.map +1 -1
  6. package/dist/adapters/pg/auth-event-repository.js +30 -0
  7. package/dist/adapters/pg/auth-event-repository.js.map +1 -0
  8. package/dist/adapters/pg/client.js +24 -4
  9. package/dist/adapters/pg/client.js.map +1 -1
  10. package/dist/adapters/pg/login-challenge-repository.js.map +1 -1
  11. package/dist/adapters/pg/login-ip-repository.js +26 -0
  12. package/dist/adapters/pg/login-ip-repository.js.map +1 -0
  13. package/dist/adapters/pg/user-repository.js +47 -18
  14. package/dist/adapters/pg/user-repository.js.map +1 -1
  15. package/dist/adapters/sms/whatsapp.js +83 -0
  16. package/dist/adapters/sms/whatsapp.js.map +1 -0
  17. package/dist/app/ai-client.js +2 -2
  18. package/dist/app/ai-client.js.map +1 -1
  19. package/dist/brand.js +1 -1
  20. package/dist/brand.js.map +1 -1
  21. package/dist/cli/commands/ai.js +2 -2
  22. package/dist/cli/commands/ai.js.map +1 -1
  23. package/dist/cli/commands/auth.js +27 -20
  24. package/dist/cli/commands/auth.js.map +1 -1
  25. package/dist/cli/commands/config.js +17 -7
  26. package/dist/cli/commands/config.js.map +1 -1
  27. package/dist/cli/commands/docker.js +4 -4
  28. package/dist/cli/commands/docker.js.map +1 -1
  29. package/dist/cli/commands/docs/content.js +80 -11
  30. package/dist/cli/commands/docs/content.js.map +1 -1
  31. package/dist/cli/commands/exec.js +1 -12
  32. package/dist/cli/commands/exec.js.map +1 -1
  33. package/dist/cli/commands/init/index.js +1 -2
  34. package/dist/cli/commands/init/index.js.map +1 -1
  35. package/dist/cli/commands/init/provision-step.js +2 -20
  36. package/dist/cli/commands/init/provision-step.js.map +1 -1
  37. package/dist/cli/commands/plan.js +1 -12
  38. package/dist/cli/commands/plan.js.map +1 -1
  39. package/dist/cli/commands/security.js +82 -11
  40. package/dist/cli/commands/security.js.map +1 -1
  41. package/dist/cli/commands/sync.js +9 -19
  42. package/dist/cli/commands/sync.js.map +1 -1
  43. package/dist/cli/commands/validate-plan.js +1 -10
  44. package/dist/cli/commands/validate-plan.js.map +1 -1
  45. package/dist/cli/copy/flows.json +1 -2
  46. package/dist/cli/copy.js.map +1 -1
  47. package/dist/cli/flows/dependencies.js +0 -4
  48. package/dist/cli/flows/dependencies.js.map +1 -1
  49. package/dist/cli/help-guide.js +69 -0
  50. package/dist/cli/help-guide.js.map +1 -0
  51. package/dist/cli/program.js +3 -3
  52. package/dist/cli/program.js.map +1 -1
  53. package/dist/cli/ui/render.js +0 -27
  54. package/dist/cli/ui/render.js.map +1 -1
  55. package/dist/cli.js +10 -2
  56. package/dist/cli.js.map +1 -1
  57. package/dist/gateway/config.js +23 -1
  58. package/dist/gateway/config.js.map +1 -1
  59. package/dist/gateway/edge-filter.js +20 -3
  60. package/dist/gateway/edge-filter.js.map +1 -1
  61. package/dist/gateway/index.js +145 -22
  62. package/dist/gateway/index.js.map +1 -1
  63. package/dist/gateway/middleware/auth.js +15 -3
  64. package/dist/gateway/middleware/auth.js.map +1 -1
  65. package/dist/gateway/services/login.js +52 -17
  66. package/dist/gateway/services/login.js.map +1 -1
  67. package/dist/gateway/services/register.js +20 -0
  68. package/dist/gateway/services/register.js.map +1 -0
  69. package/dist/gateway/services/security.js +69 -16
  70. package/dist/gateway/services/security.js.map +1 -1
  71. package/dist/gateway/throttle.js +57 -0
  72. package/dist/gateway/throttle.js.map +1 -0
  73. package/dist/lib/auth/backup-codes.js +4 -4
  74. package/dist/lib/auth/backup-codes.js.map +1 -1
  75. package/dist/lib/auth/breach-check.js +58 -0
  76. package/dist/lib/auth/breach-check.js.map +1 -0
  77. package/dist/lib/auth/gateway-client.js +17 -2
  78. package/dist/lib/auth/gateway-client.js.map +1 -1
  79. package/dist/lib/auth/gateway-process.js +17 -2
  80. package/dist/lib/auth/gateway-process.js.map +1 -1
  81. package/dist/lib/auth/gateway-token.js +5 -2
  82. package/dist/lib/auth/gateway-token.js.map +1 -1
  83. package/dist/lib/auth/nio-config.js +57 -7
  84. package/dist/lib/auth/nio-config.js.map +1 -1
  85. package/dist/lib/auth/otp.js +3 -3
  86. package/dist/lib/auth/otp.js.map +1 -1
  87. package/dist/lib/auth/password.js +33 -10
  88. package/dist/lib/auth/password.js.map +1 -1
  89. package/dist/lib/auth/secrets.js +96 -0
  90. package/dist/lib/auth/secrets.js.map +1 -0
  91. package/dist/lib/auth/session-store.js +2 -2
  92. package/dist/lib/auth/session-store.js.map +1 -1
  93. package/dist/lib/clients/client-configs.js +81 -86
  94. package/dist/lib/clients/client-configs.js.map +1 -1
  95. package/dist/lib/clients/client-install.js +22 -4
  96. package/dist/lib/clients/client-install.js.map +1 -1
  97. package/dist/lib/deps/dependencies.js +0 -25
  98. package/dist/lib/deps/dependencies.js.map +1 -1
  99. package/dist/lib/deps/dependency-install.js +3 -23
  100. package/dist/lib/deps/dependency-install.js.map +1 -1
  101. package/dist/lib/exec/exec-delegate.js +69 -48
  102. package/dist/lib/exec/exec-delegate.js.map +1 -1
  103. package/dist/lib/exec/plan-delegate.js +25 -34
  104. package/dist/lib/exec/plan-delegate.js.map +1 -1
  105. package/dist/lib/exec/qwen-client.js +74 -0
  106. package/dist/lib/exec/qwen-client.js.map +1 -0
  107. package/dist/lib/exec/validate-plan-delegate.js +13 -30
  108. package/dist/lib/exec/validate-plan-delegate.js.map +1 -1
  109. package/dist/lib/fetch-zipball.js +59 -0
  110. package/dist/lib/fetch-zipball.js.map +1 -0
  111. package/dist/lib/load-env.js +17 -5
  112. package/dist/lib/load-env.js.map +1 -1
  113. package/dist/lib/open-url.js +5 -2
  114. package/dist/lib/open-url.js.map +1 -1
  115. package/dist/lib/proc.js +27 -0
  116. package/dist/lib/proc.js.map +1 -1
  117. package/dist/lib/provision/provision.js +2 -2
  118. package/dist/lib/provision/provision.js.map +1 -1
  119. package/dist/lib/skills/patterns.js +15 -24
  120. package/dist/lib/skills/patterns.js.map +1 -1
  121. package/dist/lib/skills/skills-cache.js +25 -12
  122. package/dist/lib/skills/skills-cache.js.map +1 -1
  123. package/dist/lib/skills/skills.js +1 -1
  124. package/dist/lib/skills/skills.js.map +1 -1
  125. package/dist/lib/version-check.js +1 -11
  126. package/dist/lib/version-check.js.map +1 -1
  127. package/dist/mcp-server.js +5 -17
  128. package/dist/mcp-server.js.map +1 -1
  129. package/dist/tools/delegate-exec.js +3 -10
  130. package/dist/tools/delegate-exec.js.map +1 -1
  131. package/dist/tools/plan.js +6 -13
  132. package/dist/tools/plan.js.map +1 -1
  133. package/dist/tools/validate-plan.js +6 -14
  134. package/dist/tools/validate-plan.js.map +1 -1
  135. package/dist/tui/app.js +102 -18
  136. package/dist/tui/app.js.map +1 -1
  137. package/dist/tui/components.js +161 -88
  138. package/dist/tui/components.js.map +1 -1
  139. package/dist/tui/launch.js +6 -1
  140. package/dist/tui/launch.js.map +1 -1
  141. package/dist/tui/opencode.js +27 -0
  142. package/dist/tui/opencode.js.map +1 -1
  143. package/dist/tui/palette.js +12 -5
  144. package/dist/tui/palette.js.map +1 -1
  145. package/dist/tui/prompt-input.js +168 -0
  146. package/dist/tui/prompt-input.js.map +1 -0
  147. package/dist/tui/state.js +252 -20
  148. package/dist/tui/state.js.map +1 -1
  149. package/dist/tui/test-utils.js +24 -0
  150. package/dist/tui/test-utils.js.map +1 -0
  151. package/dist/version.js +17 -6
  152. package/dist/version.js.map +1 -1
  153. package/docker/docker-compose.yml +56 -26
  154. package/docker/kong.yml +10 -0
  155. package/package.json +21 -12
  156. package/dist/adapters/sms/http-generic.js +0 -50
  157. package/dist/adapters/sms/http-generic.js.map +0 -1
  158. package/dist/cli/commands/clean.js +0 -108
  159. package/dist/cli/commands/clean.js.map +0 -1
  160. package/dist/lib/clients/hooks.js +0 -191
  161. package/dist/lib/clients/hooks.js.map +0 -1
  162. package/dist/lib/exec/exec-engines.js +0 -63
  163. package/dist/lib/exec/exec-engines.js.map +0 -1
@@ -1,11 +1,11 @@
1
- import { spawn, spawnSync } from 'node:child_process';
1
+ import { spawnSync } from 'node:child_process';
2
2
  import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
- import { join } from 'node:path';
3
+ import { dirname, join, resolve, sep } from 'node:path';
4
4
  import { randomUUID } from 'node:crypto';
5
5
  import { skillsDir } from '../skills/skills.js';
6
6
  import { homePath } from '../../brand.js';
7
7
  import { HARNESS_RULES_REL, HARNESS_PATTERNS_REL } from '../clients/harness.js';
8
- import { DEFAULT_ENGINE, engineArgs, engineMissingError, resolveEngineBin, } from './exec-engines.js';
8
+ import { QWEN_ENGINE, qwenComplete, parseFileBlocks, } from './qwen-client.js';
9
9
  const jobs = new Map();
10
10
  function jobsDir() {
11
11
  return homePath('exec-jobs');
@@ -36,12 +36,22 @@ export function getJob(id) {
36
36
  }
37
37
  function buildPrompt(instruction) {
38
38
  return [
39
- 'Implemente a tarefa abaixo NESTE worktree.',
39
+ 'Implemente a tarefa abaixo NESTE worktree (pastas e arquivos relativos à raiz do trabalho).',
40
40
  `Antes de codar: leia AGENTS.md, ${HARNESS_RULES_REL} e ${HARNESS_PATTERNS_REL} e SIGA-OS.`,
41
41
  'Regras: mudança mínima; nada de libs/estilos fora do harness.',
42
42
  'Limites: arquivo <300 linhas, função <30 linhas, comentário <=1 linha.',
43
43
  'Rode lint/build/testes do repo. NÃO commite — deixe o trabalho staged.',
44
44
  '',
45
+ 'Você NÃO tem acesso ao filesystem: devolva APENAS os arquivos a criar/alterar, cada um ' +
46
+ 'neste formato exato, nessa ordem (sem texto fora dos blocos, sem cercas de código):',
47
+ '',
48
+ '<<<FILE caminho/relativo.ext>>>',
49
+ '<conteúdo completo do arquivo>',
50
+ '<<<END_FILE>>>',
51
+ '',
52
+ 'Se a tarefa não exigir código, responda com texto puro explicando o porquê.',
53
+ '',
54
+ '## Tarefa',
45
55
  instruction,
46
56
  ].join('\n');
47
57
  }
@@ -95,36 +105,61 @@ function runChecks(worktree) {
95
105
  function finish(job) {
96
106
  return save({ ...job, finishedAt: new Date().toISOString() });
97
107
  }
98
- function spawnEngine(job, bin, prompt, opts = {}) {
99
- const child = spawn(bin, engineArgs(job.engine, prompt), {
100
- cwd: job.worktree,
101
- stdio: ['ignore', 'pipe', 'pipe'],
102
- });
103
- let out = '';
104
- const collect = (d) => {
105
- const s = d.toString();
106
- out += s;
108
+ function resolveRel(worktree, rel) {
109
+ const dest = resolve(worktree, rel);
110
+ if (dest !== worktree && !dest.startsWith(worktree + sep)) {
111
+ throw new Error(`caminho fora do worktree: ${rel}`);
112
+ }
113
+ return dest;
114
+ }
115
+ function applyBlocks(worktree, text) {
116
+ const blocks = parseFileBlocks(text);
117
+ if (blocks.length === 0) {
118
+ throw new Error('resposta sem blocos <<<FILE>>> — nada aplicado');
119
+ }
120
+ const written = [];
121
+ for (const b of blocks) {
122
+ const dest = resolveRel(worktree, b.path);
123
+ mkdirSync(dirname(dest), { recursive: true });
124
+ writeFileSync(dest, b.content, 'utf8');
125
+ written.push(b.path);
126
+ }
127
+ return written;
128
+ }
129
+ async function runEngine(job, prompt, opts = {}) {
130
+ try {
131
+ const text = await qwenComplete(prompt);
107
132
  if (opts.echo)
108
- process.stderr.write(s);
109
- };
110
- child.stdout.on('data', collect);
111
- child.stderr.on('data', collect);
112
- child.on('error', (e) => opts.onDone?.(finish({ ...job, state: 'failed', error: e.message })));
113
- child.on('close', (code) => opts.onDone?.(finish({
114
- ...job,
115
- state: code === 0 ? 'done' : 'failed',
116
- exitCode: code,
117
- summary: out.trim().slice(-2000),
118
- checks: runChecks(job.worktree),
119
- changed: changedFiles(job.worktree),
120
- })));
121
- }
122
- function newJob(worktree, engine) {
133
+ process.stderr.write(text);
134
+ applyBlocks(job.worktree, text);
135
+ const done = finish({
136
+ ...job,
137
+ state: 'done',
138
+ exitCode: 0,
139
+ summary: text.trim().slice(-2000),
140
+ checks: runChecks(job.worktree),
141
+ changed: changedFiles(job.worktree),
142
+ });
143
+ opts.onDone?.(done);
144
+ return done;
145
+ }
146
+ catch (e) {
147
+ const failed = finish({
148
+ ...job,
149
+ state: 'failed',
150
+ exitCode: 1,
151
+ error: e.message,
152
+ });
153
+ opts.onDone?.(failed);
154
+ return failed;
155
+ }
156
+ }
157
+ function newJob(worktree) {
123
158
  return {
124
159
  id: randomUUID().slice(0, 8),
125
160
  state: 'running',
126
161
  worktree,
127
- engine,
162
+ engine: QWEN_ENGINE,
128
163
  exitCode: null,
129
164
  summary: '',
130
165
  checks: {},
@@ -132,27 +167,13 @@ function newJob(worktree, engine) {
132
167
  startedAt: new Date().toISOString(),
133
168
  };
134
169
  }
135
- function prepare(worktree, engine) {
136
- const job = newJob(worktree, engine);
137
- const bin = resolveEngineBin(engine);
138
- if (!bin) {
139
- return finish({ ...job, state: 'failed', error: engineMissingError(engine) });
140
- }
141
- return { job, bin: save(job) && bin };
142
- }
143
170
  export function startExec(opts) {
144
- const p = prepare(opts.worktree, opts.engine ?? DEFAULT_ENGINE);
145
- if ('state' in p)
146
- return p;
147
- spawnEngine(p.job, p.bin, buildPrompt(opts.instruction), { onDone: () => undefined });
148
- return p.job;
171
+ const job = save(newJob(opts.worktree));
172
+ void runEngine(job, buildPrompt(opts.instruction));
173
+ return job;
149
174
  }
150
175
  export function runExec(opts) {
151
- return new Promise((resolve) => {
152
- const p = prepare(opts.worktree, opts.engine ?? DEFAULT_ENGINE);
153
- if ('state' in p)
154
- return resolve(p);
155
- spawnEngine(p.job, p.bin, buildPrompt(opts.instruction), { echo: opts.echo, onDone: resolve });
156
- });
176
+ const job = save(newJob(opts.worktree));
177
+ return runEngine(job, buildPrompt(opts.instruction), { echo: opts.echo });
157
178
  }
158
179
  //# sourceMappingURL=exec-delegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../../src/lib/exec/exec-delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"exec-delegate.js","sourceRoot":"","sources":["../../../src/lib/exec/exec-delegate.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,6 @@
1
- import { spawn } from 'node:child_process';
2
1
  import { readFileSync, renameSync, writeFileSync } from 'node:fs';
3
2
  import { join } from 'node:path';
4
- import { PLAN_ENGINE, engineArgs, engineMissingError, resolveEngineBin, } from './exec-engines.js';
3
+ import { QWEN_ENGINE, qwenComplete } from './qwen-client.js';
5
4
  import { HARNESS_RULES_REL } from '../clients/harness.js';
6
5
  export const PLAN_TEMPLATE = [
7
6
  '# Plano',
@@ -60,41 +59,33 @@ function writeAtomic(project, content) {
60
59
  renameSync(tmp, target);
61
60
  return target;
62
61
  }
63
- function spawnPlan(bin, engine, prompt, project, echo) {
64
- return new Promise((resolve) => {
65
- const child = spawn(bin, engineArgs(engine, prompt), {
66
- cwd: project,
67
- stdio: ['ignore', 'pipe', 'pipe'],
68
- });
69
- let markdown = '';
70
- child.stdout.on('data', (d) => (markdown += d.toString()));
71
- child.stderr.on('data', (d) => echo && process.stderr.write(d.toString()));
72
- const fail = (error) => {
73
- resolve({ ok: false, path: planPath(project), engine, error });
62
+ async function apiPlan(prompt, project, echo) {
63
+ try {
64
+ const markdown = await qwenComplete(prompt);
65
+ if (echo)
66
+ process.stderr.write(markdown);
67
+ const content = stripFence(markdown);
68
+ if (!content) {
69
+ return {
70
+ ok: false,
71
+ path: planPath(project),
72
+ engine: QWEN_ENGINE,
73
+ error: 'engine não devolveu markdown',
74
+ };
75
+ }
76
+ return { ok: true, path: writeAtomic(project, content), engine: QWEN_ENGINE };
77
+ }
78
+ catch (e) {
79
+ return {
80
+ ok: false,
81
+ path: planPath(project),
82
+ engine: QWEN_ENGINE,
83
+ error: e.message,
74
84
  };
75
- child.on('error', (e) => fail(e.message));
76
- child.on('close', (code) => {
77
- if (code !== 0)
78
- return fail(`engine ${engine} falhou (exit ${code})`);
79
- const content = stripFence(markdown);
80
- if (!content)
81
- return fail(`engine ${engine} não devolveu markdown`);
82
- resolve({ ok: true, path: writeAtomic(project, content), engine });
83
- });
84
- });
85
+ }
85
86
  }
86
87
  export function runPlan(opts) {
87
- const engine = opts.engine ?? PLAN_ENGINE;
88
- const bin = resolveEngineBin(engine);
89
- if (!bin) {
90
- return Promise.resolve({
91
- ok: false,
92
- path: planPath(opts.project),
93
- engine,
94
- error: engineMissingError(engine),
95
- });
96
- }
97
88
  const prompt = buildPlanPrompt(opts.instruction, planBase(opts.project));
98
- return spawnPlan(bin, engine, prompt, opts.project, opts.echo === true);
89
+ return apiPlan(prompt, opts.project, opts.echo === true);
99
90
  }
100
91
  //# sourceMappingURL=plan-delegate.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"plan-delegate.js","sourceRoot":"","sources":["../../../src/lib/exec/plan-delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"plan-delegate.js","sourceRoot":"","sources":["../../../src/lib/exec/plan-delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ import { NIO_AI_BASE_URL, NIO_AI_MAX_INPUT, NIO_AI_MODEL_ID, NIO_AI_OUTPUT, } from '../clients/client-configs.js';
2
+ export const QWEN_ENGINE = 'qwen-3.0/vllm';
3
+ export class QwenError extends Error {
4
+ status;
5
+ constructor(message, status) {
6
+ super(message);
7
+ this.name = 'QwenError';
8
+ this.status = status;
9
+ }
10
+ }
11
+ const DEFAULT_TIMEOUT_MS = 120_000;
12
+ export function estimateInputTokens(system, prompt) {
13
+ return Math.ceil(((system?.length ?? 0) + prompt.length) / 4);
14
+ }
15
+ export async function qwenComplete(prompt, opts = {}) {
16
+ if (NIO_AI_MAX_INPUT > 0) {
17
+ const est = estimateInputTokens(opts.system, prompt);
18
+ if (est > NIO_AI_MAX_INPUT) {
19
+ throw new QwenError(`Prompt com ~${est} tokens de input excede o teto NIO_AI_MAX_INPUT=${NIO_AI_MAX_INPUT}. ` +
20
+ `Enxugue o prompt (menos MCPs/skills no contexto) ou suba o teto via NIO_AI_MAX_INPUT.`);
21
+ }
22
+ }
23
+ const url = `${NIO_AI_BASE_URL.replace(/\/+$/, '')}/chat/completions`;
24
+ const controller = new AbortController();
25
+ const timer = setTimeout(() => controller.abort(), opts.timeoutMs ?? DEFAULT_TIMEOUT_MS);
26
+ try {
27
+ const res = await fetch(url, {
28
+ method: 'POST',
29
+ headers: { 'content-type': 'application/json' },
30
+ body: JSON.stringify({
31
+ model: NIO_AI_MODEL_ID,
32
+ messages: [
33
+ ...(opts.system ? [{ role: 'system', content: opts.system }] : []),
34
+ { role: 'user', content: prompt },
35
+ ],
36
+ max_tokens: opts.maxTokens ?? NIO_AI_OUTPUT,
37
+ temperature: opts.temperature ?? 0.2,
38
+ stream: false,
39
+ }),
40
+ signal: controller.signal,
41
+ });
42
+ if (!res.ok) {
43
+ const detail = (await res.text()).slice(0, 500);
44
+ throw new QwenError(`vLLM respondeu ${res.status}: ${detail}`, res.status);
45
+ }
46
+ const data = (await res.json());
47
+ const content = data.choices?.[0]?.message?.content;
48
+ if (typeof content !== 'string' || !content.trim()) {
49
+ throw new QwenError('vLLM devolveu resposta vazia');
50
+ }
51
+ return content;
52
+ }
53
+ catch (e) {
54
+ if (e instanceof QwenError)
55
+ throw e;
56
+ const cause = e instanceof Error ? e.message : String(e);
57
+ throw new QwenError(`vLLM indisponível em ${NIO_AI_BASE_URL}: ${cause}`);
58
+ }
59
+ finally {
60
+ clearTimeout(timer);
61
+ }
62
+ }
63
+ const FILE_BLOCK_RE = /<<<FILE\s+([^\r\n>]+)>>>\r?\n?([\s\S]*?)<<<END_FILE>>>/g;
64
+ export function parseFileBlocks(text) {
65
+ const blocks = [];
66
+ for (const m of text.matchAll(FILE_BLOCK_RE)) {
67
+ const path = m[1].trim();
68
+ if (!path)
69
+ continue;
70
+ blocks.push({ path, content: m[2] });
71
+ }
72
+ return blocks;
73
+ }
74
+ //# sourceMappingURL=qwen-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"qwen-client.js","sourceRoot":"","sources":["../../../src/lib/exec/qwen-client.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,7 @@
1
- import { spawn } from 'node:child_process';
2
1
  import { brand } from '../../brand.js';
3
2
  import { readFileSync } from 'node:fs';
4
3
  import { planPath, stripFence } from './plan-delegate.js';
5
- import { PLAN_ENGINE, engineArgs, engineMissingError, resolveEngineBin, } from './exec-engines.js';
4
+ import { QWEN_ENGINE, qwenComplete } from './qwen-client.js';
6
5
  import { HARNESS_RULES_REL } from '../clients/harness.js';
7
6
  const SLUG_MAX = 50;
8
7
  const SLUG_FALLBACK = 'plan';
@@ -59,42 +58,26 @@ export function parseVerdict(text) {
59
58
  throw new Error('veredito ambíguo: sem justificativa (reason vazio)');
60
59
  return { needsSpec, reason };
61
60
  }
62
- function spawnValidate(bin, engine, prompt, project, echo) {
63
- return new Promise((resolve) => {
64
- const child = spawn(bin, engineArgs(engine, prompt), {
65
- cwd: project,
66
- stdio: ['ignore', 'pipe', 'pipe'],
67
- });
68
- let out = '';
69
- child.stdout.on('data', (d) => (out += d.toString()));
70
- child.stderr.on('data', (d) => echo && process.stderr.write(d.toString()));
71
- const fail = (error) => resolve({ ok: false, engine, error });
72
- child.on('error', (e) => fail(e.message));
73
- child.on('close', (code) => {
74
- if (code !== 0)
75
- return fail(`engine ${engine} falhou (exit ${code})`);
76
- try {
77
- resolve({ ok: true, engine, ...parseVerdict(out) });
78
- }
79
- catch (e) {
80
- fail(e.message);
81
- }
82
- });
83
- });
61
+ async function apiValidate(prompt, project, echo) {
62
+ try {
63
+ const out = await qwenComplete(prompt);
64
+ if (echo)
65
+ process.stderr.write(out);
66
+ return { ok: true, engine: QWEN_ENGINE, ...parseVerdict(out) };
67
+ }
68
+ catch (e) {
69
+ return { ok: false, engine: QWEN_ENGINE, error: e.message };
70
+ }
84
71
  }
85
72
  export async function runValidatePlan(opts) {
86
- const engine = opts.engine ?? PLAN_ENGINE;
87
73
  let plan;
88
74
  try {
89
75
  plan = readPlan(opts.project);
90
76
  }
91
77
  catch {
92
- return { ok: false, engine, error: planMissingError(opts.project) };
78
+ return { ok: false, engine: QWEN_ENGINE, error: planMissingError(opts.project) };
93
79
  }
94
- const bin = resolveEngineBin(engine);
95
- if (!bin)
96
- return { ok: false, engine, error: engineMissingError(engine) };
97
- const result = await spawnValidate(bin, engine, buildValidatePrompt(plan), opts.project, opts.echo === true);
80
+ const result = await apiValidate(buildValidatePrompt(plan), opts.project, opts.echo === true);
98
81
  if (result.ok && result.needsSpec)
99
82
  result.suggestedSlug = suggestSlug(plan);
100
83
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"validate-plan-delegate.js","sourceRoot":"","sources":["../../../src/lib/exec/validate-plan-delegate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate-plan-delegate.js","sourceRoot":"","sources":["../../../src/lib/exec/validate-plan-delegate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { readdirSync, lstatSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ export const DEFAULT_MAX_ZIP_BYTES = 64 * 1024 * 1024;
4
+ export async function fetchZipball(url, opts) {
5
+ const maxBytes = opts.maxBytes ?? DEFAULT_MAX_ZIP_BYTES;
6
+ const ac = new AbortController();
7
+ let timedOut = false;
8
+ const timer = setTimeout(() => {
9
+ timedOut = true;
10
+ ac.abort();
11
+ }, opts.timeoutMs);
12
+ try {
13
+ const res = await fetch(url, { signal: ac.signal, redirect: 'follow' });
14
+ if (!res.ok)
15
+ throw new Error(`HTTP ${res.status} ao baixar ${url}`);
16
+ const declared = Number(res.headers.get('content-length'));
17
+ if (Number.isFinite(declared) && declared > maxBytes) {
18
+ throw new Error(`zipball grande demais (${declared} bytes > ${maxBytes})`);
19
+ }
20
+ if (!res.body)
21
+ return Buffer.from(await res.arrayBuffer());
22
+ const chunks = [];
23
+ let total = 0;
24
+ for await (const chunk of res.body) {
25
+ total += chunk.length;
26
+ if (total > maxBytes) {
27
+ ac.abort();
28
+ throw new Error(`zipball excedeu o teto de ${maxBytes} bytes durante o download`);
29
+ }
30
+ chunks.push(chunk);
31
+ }
32
+ return Buffer.concat(chunks);
33
+ }
34
+ catch (err) {
35
+ if (timedOut)
36
+ throw new Error(`timeout após ${opts.timeoutMs}ms baixando ${url}`);
37
+ throw err;
38
+ }
39
+ finally {
40
+ clearTimeout(timer);
41
+ }
42
+ }
43
+ export function codeloadZipUrl(repo, ref) {
44
+ return `https://codeload.github.com/${repo}/zip/${encodeURIComponent(ref)}`;
45
+ }
46
+ export function isPinnedRef(ref) {
47
+ return /^[0-9a-f]{40}$/i.test(ref.trim());
48
+ }
49
+ export function rejectSymlinks(dir) {
50
+ for (const entry of readdirSync(dir, { withFileTypes: true })) {
51
+ const full = join(dir, entry.name);
52
+ if (entry.isSymbolicLink() || lstatSync(full).isSymbolicLink()) {
53
+ throw new Error(`entrada symlink recusada no bundle: ${entry.name}`);
54
+ }
55
+ if (entry.isDirectory())
56
+ rejectSymlinks(full);
57
+ }
58
+ }
59
+ //# sourceMappingURL=fetch-zipball.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-zipball.js","sourceRoot":"","sources":["../../src/lib/fetch-zipball.ts"],"names":[],"mappings":"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"}
@@ -2,8 +2,14 @@ import { homedir } from 'node:os';
2
2
  import { join } from 'node:path';
3
3
  import { existsSync, readFileSync } from 'node:fs';
4
4
  const debug = /^(1|true|yes|on)$/i.test((process.env.NIO_DEBUG ?? '').trim());
5
+ const CWD_ALLOWLIST = new Set([
6
+ 'NIO_DEBUG',
7
+ 'NIO_NO_ANIM',
8
+ 'NIO_TELEMETRY',
9
+ 'NIO_NO_TELEMETRY',
10
+ ]);
5
11
  const nodeLoad = process.loadEnvFile;
6
- function parseAndApply(text) {
12
+ function parseAndApply(text, allow) {
7
13
  for (const raw of text.split('\n')) {
8
14
  const line = raw.trim();
9
15
  if (!line || line.startsWith('#'))
@@ -12,22 +18,27 @@ function parseAndApply(text) {
12
18
  if (eq < 1)
13
19
  continue;
14
20
  const key = line.slice(0, eq).trim();
21
+ if (allow && !allow.has(key)) {
22
+ if (debug)
23
+ console.error(`[nio:debug] env ignorada (fora do allowlist do cwd): ${key}`);
24
+ continue;
25
+ }
15
26
  if (process.env[key] === undefined) {
16
27
  process.env[key] = line.slice(eq + 1).trim();
17
28
  }
18
29
  }
19
30
  }
20
- function tryLoad(path) {
31
+ function tryLoad(path, allow) {
21
32
  if (!existsSync(path)) {
22
33
  if (debug)
23
34
  console.error(`[nio:debug] env ausente: ${path}`);
24
35
  return;
25
36
  }
26
37
  try {
27
- if (nodeLoad)
38
+ if (nodeLoad && !allow)
28
39
  nodeLoad(path);
29
40
  else
30
- parseAndApply(readFileSync(path, 'utf8'));
41
+ parseAndApply(readFileSync(path, 'utf8'), allow);
31
42
  if (debug)
32
43
  console.error(`[nio:debug] env carregado: ${path}`);
33
44
  }
@@ -39,6 +50,7 @@ function tryLoad(path) {
39
50
  const explicit = process.env.NIO_ENV_FILE?.trim();
40
51
  if (explicit)
41
52
  tryLoad(explicit);
42
- tryLoad(join(process.cwd(), '.env'));
53
+ tryLoad(join(process.cwd(), '.env'), CWD_ALLOWLIST);
43
54
  tryLoad(join(homedir(), '.nio', 'config.env'));
55
+ export { CWD_ALLOWLIST, parseAndApply };
44
56
  //# sourceMappingURL=load-env.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../src/lib/load-env.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAG9E,MAAM,QAAQ,GAAI,OAAiD,CAAC,WAAW,CAAC;AAGhF,SAAS,aAAa,CAAC,IAAY;IACjC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAY;IAC3B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QACH,IAAI,QAAQ;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;;YACxB,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;QAC/C,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,2BAA4B,GAAa,CAAC,OAAO,MAAM,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;AAClD,IAAI,QAAQ;IAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AACrC,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"load-env.js","sourceRoot":"","sources":["../../src/lib/load-env.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,MAAM,KAAK,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAG9E,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC;IAC5B,WAAW;IACX,aAAa;IACb,eAAe;IACf,kBAAkB;CACnB,CAAC,CAAC;AAGH,MAAM,QAAQ,GAAI,OAAiD,CAAC,WAAW,CAAC;AAMhF,SAAS,aAAa,CAAC,IAAY,EAAE,KAAmB;IACtD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;QACxB,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,EAAE,GAAG,CAAC;YAAE,SAAS;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACrC,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,IAAI,KAAK;gBAAE,OAAO,CAAC,KAAK,CAAC,wDAAwD,GAAG,EAAE,CAAC,CAAC;YACxF,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC/C,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAmB;IAChD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,4BAA4B,IAAI,EAAE,CAAC,CAAC;QAC7D,OAAO;IACT,CAAC;IACD,IAAI,CAAC;QAGH,IAAI,QAAQ,IAAI,CAAC,KAAK;YAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;;YAClC,aAAa,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;QACtD,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;IACjE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,KAAK;YAAE,OAAO,CAAC,KAAK,CAAC,2BAA4B,GAAa,CAAC,OAAO,MAAM,IAAI,EAAE,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC;AAClD,IAAI,QAAQ;IAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;AAChC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,aAAa,CAAC,CAAC;AACpD,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AAE/C,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,CAAC"}
@@ -1,7 +1,10 @@
1
1
  import { spawn } from 'node:child_process';
2
2
  export function openUrl(target) {
3
- const bin = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'cmd' : 'xdg-open';
4
- const args = process.platform === 'win32' ? ['/c', 'start', '', target] : [target];
3
+ const [bin, args] = process.platform === 'darwin'
4
+ ? ['open', [target]]
5
+ : process.platform === 'win32'
6
+ ? ['rundll32.exe', ['url.dll,FileProtocolHandler', target]]
7
+ : ['xdg-open', [target]];
5
8
  const child = spawn(bin, args, { detached: true, stdio: 'ignore' });
6
9
  child.on('error', () => { });
7
10
  child.unref();
@@ -1 +1 @@
1
- {"version":3,"file":"open-url.js","sourceRoot":"","sources":["../../src/lib/open-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,MAAM,GAAG,GACP,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC;IAC7F,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpE,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}
1
+ {"version":3,"file":"open-url.js","sourceRoot":"","sources":["../../src/lib/open-url.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,UAAU,OAAO,CAAC,MAAc;IAKpC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GACf,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,MAAM,CAAC,CAAC;QACpB,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAE/B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAa,EAAE,IAAgB,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1F,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IAC5B,KAAK,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC"}