@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.
- package/.env.example +88 -12
- package/Dockerfile.gateway +13 -5
- package/README.md +186 -78
- package/dist/adapters/lang/vendor.js +5 -10
- package/dist/adapters/lang/vendor.js.map +1 -1
- package/dist/adapters/pg/auth-event-repository.js +30 -0
- package/dist/adapters/pg/auth-event-repository.js.map +1 -0
- package/dist/adapters/pg/client.js +24 -4
- package/dist/adapters/pg/client.js.map +1 -1
- package/dist/adapters/pg/login-challenge-repository.js.map +1 -1
- package/dist/adapters/pg/login-ip-repository.js +26 -0
- package/dist/adapters/pg/login-ip-repository.js.map +1 -0
- package/dist/adapters/pg/user-repository.js +47 -18
- package/dist/adapters/pg/user-repository.js.map +1 -1
- package/dist/adapters/sms/whatsapp.js +83 -0
- package/dist/adapters/sms/whatsapp.js.map +1 -0
- package/dist/app/ai-client.js +2 -2
- package/dist/app/ai-client.js.map +1 -1
- package/dist/brand.js +1 -1
- package/dist/brand.js.map +1 -1
- package/dist/cli/commands/ai.js +2 -2
- package/dist/cli/commands/ai.js.map +1 -1
- package/dist/cli/commands/auth.js +27 -20
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/config.js +17 -7
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/docker.js +4 -4
- package/dist/cli/commands/docker.js.map +1 -1
- package/dist/cli/commands/docs/content.js +80 -11
- package/dist/cli/commands/docs/content.js.map +1 -1
- package/dist/cli/commands/exec.js +1 -12
- package/dist/cli/commands/exec.js.map +1 -1
- package/dist/cli/commands/init/index.js +1 -2
- package/dist/cli/commands/init/index.js.map +1 -1
- package/dist/cli/commands/init/provision-step.js +2 -20
- package/dist/cli/commands/init/provision-step.js.map +1 -1
- package/dist/cli/commands/plan.js +1 -12
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/security.js +82 -11
- package/dist/cli/commands/security.js.map +1 -1
- package/dist/cli/commands/sync.js +9 -19
- package/dist/cli/commands/sync.js.map +1 -1
- package/dist/cli/commands/validate-plan.js +1 -10
- package/dist/cli/commands/validate-plan.js.map +1 -1
- package/dist/cli/copy/flows.json +1 -2
- package/dist/cli/copy.js.map +1 -1
- package/dist/cli/flows/dependencies.js +0 -4
- package/dist/cli/flows/dependencies.js.map +1 -1
- package/dist/cli/help-guide.js +69 -0
- package/dist/cli/help-guide.js.map +1 -0
- package/dist/cli/program.js +3 -3
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/ui/render.js +0 -27
- package/dist/cli/ui/render.js.map +1 -1
- package/dist/cli.js +10 -2
- package/dist/cli.js.map +1 -1
- package/dist/gateway/config.js +23 -1
- package/dist/gateway/config.js.map +1 -1
- package/dist/gateway/edge-filter.js +20 -3
- package/dist/gateway/edge-filter.js.map +1 -1
- package/dist/gateway/index.js +145 -22
- package/dist/gateway/index.js.map +1 -1
- package/dist/gateway/middleware/auth.js +15 -3
- package/dist/gateway/middleware/auth.js.map +1 -1
- package/dist/gateway/services/login.js +52 -17
- package/dist/gateway/services/login.js.map +1 -1
- package/dist/gateway/services/register.js +20 -0
- package/dist/gateway/services/register.js.map +1 -0
- package/dist/gateway/services/security.js +69 -16
- package/dist/gateway/services/security.js.map +1 -1
- package/dist/gateway/throttle.js +57 -0
- package/dist/gateway/throttle.js.map +1 -0
- package/dist/lib/auth/backup-codes.js +4 -4
- package/dist/lib/auth/backup-codes.js.map +1 -1
- package/dist/lib/auth/breach-check.js +58 -0
- package/dist/lib/auth/breach-check.js.map +1 -0
- package/dist/lib/auth/gateway-client.js +17 -2
- package/dist/lib/auth/gateway-client.js.map +1 -1
- package/dist/lib/auth/gateway-process.js +17 -2
- package/dist/lib/auth/gateway-process.js.map +1 -1
- package/dist/lib/auth/gateway-token.js +5 -2
- package/dist/lib/auth/gateway-token.js.map +1 -1
- package/dist/lib/auth/nio-config.js +57 -7
- package/dist/lib/auth/nio-config.js.map +1 -1
- package/dist/lib/auth/otp.js +3 -3
- package/dist/lib/auth/otp.js.map +1 -1
- package/dist/lib/auth/password.js +33 -10
- package/dist/lib/auth/password.js.map +1 -1
- package/dist/lib/auth/secrets.js +96 -0
- package/dist/lib/auth/secrets.js.map +1 -0
- package/dist/lib/auth/session-store.js +2 -2
- package/dist/lib/auth/session-store.js.map +1 -1
- package/dist/lib/clients/client-configs.js +81 -86
- package/dist/lib/clients/client-configs.js.map +1 -1
- package/dist/lib/clients/client-install.js +22 -4
- package/dist/lib/clients/client-install.js.map +1 -1
- package/dist/lib/deps/dependencies.js +0 -25
- package/dist/lib/deps/dependencies.js.map +1 -1
- package/dist/lib/deps/dependency-install.js +3 -23
- package/dist/lib/deps/dependency-install.js.map +1 -1
- package/dist/lib/exec/exec-delegate.js +69 -48
- package/dist/lib/exec/exec-delegate.js.map +1 -1
- package/dist/lib/exec/plan-delegate.js +25 -34
- package/dist/lib/exec/plan-delegate.js.map +1 -1
- package/dist/lib/exec/qwen-client.js +74 -0
- package/dist/lib/exec/qwen-client.js.map +1 -0
- package/dist/lib/exec/validate-plan-delegate.js +13 -30
- package/dist/lib/exec/validate-plan-delegate.js.map +1 -1
- package/dist/lib/fetch-zipball.js +59 -0
- package/dist/lib/fetch-zipball.js.map +1 -0
- package/dist/lib/load-env.js +17 -5
- package/dist/lib/load-env.js.map +1 -1
- package/dist/lib/open-url.js +5 -2
- package/dist/lib/open-url.js.map +1 -1
- package/dist/lib/proc.js +27 -0
- package/dist/lib/proc.js.map +1 -1
- package/dist/lib/provision/provision.js +2 -2
- package/dist/lib/provision/provision.js.map +1 -1
- package/dist/lib/skills/patterns.js +15 -24
- package/dist/lib/skills/patterns.js.map +1 -1
- package/dist/lib/skills/skills-cache.js +25 -12
- package/dist/lib/skills/skills-cache.js.map +1 -1
- package/dist/lib/skills/skills.js +1 -1
- package/dist/lib/skills/skills.js.map +1 -1
- package/dist/lib/version-check.js +1 -11
- package/dist/lib/version-check.js.map +1 -1
- package/dist/mcp-server.js +5 -17
- package/dist/mcp-server.js.map +1 -1
- package/dist/tools/delegate-exec.js +3 -10
- package/dist/tools/delegate-exec.js.map +1 -1
- package/dist/tools/plan.js +6 -13
- package/dist/tools/plan.js.map +1 -1
- package/dist/tools/validate-plan.js +6 -14
- package/dist/tools/validate-plan.js.map +1 -1
- package/dist/tui/app.js +102 -18
- package/dist/tui/app.js.map +1 -1
- package/dist/tui/components.js +161 -88
- package/dist/tui/components.js.map +1 -1
- package/dist/tui/launch.js +6 -1
- package/dist/tui/launch.js.map +1 -1
- package/dist/tui/opencode.js +27 -0
- package/dist/tui/opencode.js.map +1 -1
- package/dist/tui/palette.js +12 -5
- package/dist/tui/palette.js.map +1 -1
- package/dist/tui/prompt-input.js +168 -0
- package/dist/tui/prompt-input.js.map +1 -0
- package/dist/tui/state.js +252 -20
- package/dist/tui/state.js.map +1 -1
- package/dist/tui/test-utils.js +24 -0
- package/dist/tui/test-utils.js.map +1 -0
- package/dist/version.js +17 -6
- package/dist/version.js.map +1 -1
- package/docker/docker-compose.yml +56 -26
- package/docker/kong.yml +10 -0
- package/package.json +21 -12
- package/dist/adapters/sms/http-generic.js +0 -50
- package/dist/adapters/sms/http-generic.js.map +0 -1
- package/dist/cli/commands/clean.js +0 -108
- package/dist/cli/commands/clean.js.map +0 -1
- package/dist/lib/clients/hooks.js +0 -191
- package/dist/lib/clients/hooks.js.map +0 -1
- package/dist/lib/exec/exec-engines.js +0 -63
- package/dist/lib/exec/exec-engines.js.map +0 -1
package/dist/tui/state.js
CHANGED
|
@@ -1,11 +1,83 @@
|
|
|
1
1
|
import { tlog } from './debug.js';
|
|
2
|
-
export
|
|
2
|
+
export function permGroupLabel(kind) {
|
|
3
|
+
const g = {
|
|
4
|
+
bash: 'shell',
|
|
5
|
+
edit: 'editar arquivo',
|
|
6
|
+
read: 'ler arquivo',
|
|
7
|
+
glob: 'listar arquivos',
|
|
8
|
+
grep: 'buscar no código',
|
|
9
|
+
webfetch: 'baixar URL',
|
|
10
|
+
websearch: 'buscar na web',
|
|
11
|
+
external_directory: 'acessar fora do projeto',
|
|
12
|
+
doom_loop: 'continuar (possível loop)',
|
|
13
|
+
task: 'sub-agente',
|
|
14
|
+
skill: 'rodar skill',
|
|
15
|
+
todowrite: 'atualizar checklist',
|
|
16
|
+
};
|
|
17
|
+
return g[kind] ?? (kind.includes('_') ? `MCP · ${kind}` : kind);
|
|
18
|
+
}
|
|
19
|
+
export function toPermissionReq(raw) {
|
|
20
|
+
const perm = raw;
|
|
21
|
+
if (!perm.id || !perm.sessionID)
|
|
22
|
+
return null;
|
|
23
|
+
const kind = perm.permission ?? perm.type ?? perm.tool?.name ?? 'ação';
|
|
24
|
+
const patterns = perm.patterns ??
|
|
25
|
+
(Array.isArray(perm.pattern) ? perm.pattern : perm.pattern ? [perm.pattern] : []);
|
|
26
|
+
return {
|
|
27
|
+
id: perm.id,
|
|
28
|
+
sessionId: perm.sessionID,
|
|
29
|
+
kind,
|
|
30
|
+
patterns,
|
|
31
|
+
command: perm.metadata?.command,
|
|
32
|
+
always: perm.always ?? [],
|
|
33
|
+
title: perm.title ?? permGroupLabel(kind),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export function reconcilePendingPermissions(prev, rawList) {
|
|
37
|
+
const live = rawList.map(toPermissionReq).filter((r) => r !== null);
|
|
38
|
+
const liveIds = new Set(live.map((r) => r.id));
|
|
39
|
+
const kept = prev.permissions.filter((r) => liveIds.has(r.id));
|
|
40
|
+
const known = new Set(kept.map((r) => r.id));
|
|
41
|
+
const added = live.filter((r) => !known.has(r.id));
|
|
42
|
+
if (added.length === 0 && kept.length === prev.permissions.length)
|
|
43
|
+
return prev;
|
|
44
|
+
return { ...prev, permissions: [...kept, ...added] };
|
|
45
|
+
}
|
|
46
|
+
function errorHint(name) {
|
|
47
|
+
switch (name) {
|
|
48
|
+
case 'ProviderAuthError':
|
|
49
|
+
return 'credencial do provedor inválida — rode `opencode auth login`';
|
|
50
|
+
case 'MessageOutputLengthError':
|
|
51
|
+
return 'a resposta ficou longa demais — peça em partes menores';
|
|
52
|
+
case 'APIError':
|
|
53
|
+
return 'erro na API do provedor';
|
|
54
|
+
default:
|
|
55
|
+
return 'erro no motor';
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export const emptyChat = {
|
|
59
|
+
messages: [],
|
|
60
|
+
busy: false,
|
|
61
|
+
permissions: [],
|
|
62
|
+
toasts: [],
|
|
63
|
+
todos: [],
|
|
64
|
+
files: [],
|
|
65
|
+
retry: null,
|
|
66
|
+
error: null,
|
|
67
|
+
diff: [],
|
|
68
|
+
};
|
|
3
69
|
const PENDING_USER = 'pending-user';
|
|
4
70
|
function clone(prev) {
|
|
5
71
|
return {
|
|
6
72
|
messages: prev.messages.map((m) => ({ ...m, parts: m.parts.map((p) => ({ ...p })) })),
|
|
7
73
|
busy: prev.busy,
|
|
8
|
-
|
|
74
|
+
permissions: prev.permissions,
|
|
75
|
+
toasts: prev.toasts,
|
|
76
|
+
todos: prev.todos,
|
|
77
|
+
files: prev.files,
|
|
78
|
+
retry: prev.retry,
|
|
79
|
+
error: prev.error,
|
|
80
|
+
diff: prev.diff,
|
|
9
81
|
};
|
|
10
82
|
}
|
|
11
83
|
function upsertMessage(state, id, role) {
|
|
@@ -45,14 +117,9 @@ export function applyEvent(prev, evt) {
|
|
|
45
117
|
tlog('event', evt.type, JSON.stringify(p).slice(0, 200));
|
|
46
118
|
const etype = evt.type;
|
|
47
119
|
if (etype === 'permission.asked' || etype === 'permission.updated') {
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
-
state.permission = {
|
|
52
|
-
id: perm.id,
|
|
53
|
-
sessionId: perm.sessionID,
|
|
54
|
-
title: perm.title ?? `${perm.permission ?? perm.tool?.name ?? 'ação'}${what}`,
|
|
55
|
-
};
|
|
120
|
+
const req = toPermissionReq(p);
|
|
121
|
+
if (req && !state.permissions.some((x) => x.id === req.id)) {
|
|
122
|
+
state.permissions = [...state.permissions, req];
|
|
56
123
|
}
|
|
57
124
|
return state;
|
|
58
125
|
}
|
|
@@ -68,24 +135,111 @@ export function applyEvent(prev, evt) {
|
|
|
68
135
|
case 'message.part.updated':
|
|
69
136
|
applyPart(state, (p.part ?? p));
|
|
70
137
|
break;
|
|
71
|
-
case 'permission.replied':
|
|
72
|
-
|
|
138
|
+
case 'permission.replied': {
|
|
139
|
+
const id = p.permissionID;
|
|
140
|
+
state.permissions = id ? state.permissions.filter((x) => x.id !== id) : [];
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case 'todo.updated': {
|
|
144
|
+
const todos = (p.todos ?? []).map((t) => ({
|
|
145
|
+
content: String(t.content ?? ''),
|
|
146
|
+
status: String(t.status ?? 'pending'),
|
|
147
|
+
}));
|
|
148
|
+
state.todos = todos;
|
|
149
|
+
break;
|
|
150
|
+
}
|
|
151
|
+
case 'file.edited': {
|
|
152
|
+
const f = p.file;
|
|
153
|
+
if (f && !state.files.includes(f))
|
|
154
|
+
state.files = [...state.files, f];
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
case 'tui.toast.show': {
|
|
158
|
+
const t = p;
|
|
159
|
+
const message = [t.title, t.message].filter(Boolean).join(' — ') || 'aviso';
|
|
160
|
+
const variant = (['info', 'success', 'warning', 'error'].includes(t.variant ?? '')
|
|
161
|
+
? t.variant
|
|
162
|
+
: 'info');
|
|
163
|
+
state.toasts = [
|
|
164
|
+
...state.toasts.slice(-4),
|
|
165
|
+
{ id: `toast-${Date.now()}-${state.toasts.length}`, message, variant, until: Date.now() + Math.max(1500, t.duration ?? 4000) },
|
|
166
|
+
];
|
|
73
167
|
break;
|
|
168
|
+
}
|
|
74
169
|
case 'session.idle':
|
|
75
|
-
case 'session.error':
|
|
76
170
|
state.busy = false;
|
|
171
|
+
state.retry = null;
|
|
77
172
|
break;
|
|
78
|
-
case 'session.
|
|
79
|
-
|
|
173
|
+
case 'session.error': {
|
|
174
|
+
state.busy = false;
|
|
175
|
+
state.retry = null;
|
|
176
|
+
const err = p.error;
|
|
177
|
+
if (err?.name && err.name !== 'MessageAbortedError') {
|
|
178
|
+
const data = err.data ?? {};
|
|
179
|
+
const raw = typeof data.message === 'string' ? data.message : '';
|
|
180
|
+
const hint = errorHint(err.name);
|
|
181
|
+
const useHint = err.name === 'ProviderAuthError' || err.name === 'MessageOutputLengthError' || !raw;
|
|
182
|
+
state.error = {
|
|
183
|
+
name: err.name,
|
|
184
|
+
message: useHint ? hint : raw,
|
|
185
|
+
retryable: err.name === 'APIError' && Boolean(data.isRetryable),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
break;
|
|
189
|
+
}
|
|
190
|
+
case 'session.diff': {
|
|
191
|
+
const files = p.diff ?? [];
|
|
192
|
+
state.diff = files
|
|
193
|
+
.filter((d) => d.file)
|
|
194
|
+
.map((d) => ({ file: String(d.file), added: d.additions ?? 0, removed: d.deletions ?? 0 }));
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case 'session.compacted':
|
|
198
|
+
state.toasts = [
|
|
199
|
+
...state.toasts.slice(-4),
|
|
200
|
+
{ id: `toast-${Date.now()}`, message: '✂ contexto compactado', variant: 'info', until: Date.now() + 4000 },
|
|
201
|
+
];
|
|
202
|
+
break;
|
|
203
|
+
case 'installation.update-available': {
|
|
204
|
+
const v = p.version;
|
|
205
|
+
state.toasts = [
|
|
206
|
+
...state.toasts.slice(-4),
|
|
207
|
+
{ id: `toast-${Date.now()}`, message: `nova versão do opencode: ${v ?? '?'}`, variant: 'info', until: Date.now() + 6000 },
|
|
208
|
+
];
|
|
209
|
+
break;
|
|
210
|
+
}
|
|
211
|
+
case 'session.status': {
|
|
212
|
+
const st = p.status;
|
|
213
|
+
if (st?.type === 'idle') {
|
|
80
214
|
state.busy = false;
|
|
215
|
+
state.retry = null;
|
|
216
|
+
}
|
|
217
|
+
else if (st?.type === 'busy') {
|
|
218
|
+
state.busy = true;
|
|
219
|
+
}
|
|
220
|
+
else if (st?.type === 'retry') {
|
|
221
|
+
state.busy = true;
|
|
222
|
+
state.retry = { attempt: st.attempt ?? 1, note: st.message ?? 'tentando de novo' };
|
|
223
|
+
}
|
|
81
224
|
break;
|
|
225
|
+
}
|
|
82
226
|
default:
|
|
83
227
|
break;
|
|
84
228
|
}
|
|
85
229
|
return state;
|
|
86
230
|
}
|
|
87
231
|
export function syncMessages(prev, raw, busy) {
|
|
88
|
-
const state = {
|
|
232
|
+
const state = {
|
|
233
|
+
messages: [],
|
|
234
|
+
busy,
|
|
235
|
+
permissions: prev.permissions,
|
|
236
|
+
toasts: prev.toasts,
|
|
237
|
+
todos: prev.todos,
|
|
238
|
+
files: prev.files,
|
|
239
|
+
retry: busy ? prev.retry : null,
|
|
240
|
+
error: prev.error,
|
|
241
|
+
diff: prev.diff,
|
|
242
|
+
};
|
|
89
243
|
for (const m of raw) {
|
|
90
244
|
if (!m.info?.id)
|
|
91
245
|
continue;
|
|
@@ -108,14 +262,29 @@ function applyPartInto(msg, raw) {
|
|
|
108
262
|
if (!part.id)
|
|
109
263
|
return;
|
|
110
264
|
const type = part.type ?? 'text';
|
|
111
|
-
if (type === 'step-start'
|
|
265
|
+
if (type === 'step-start')
|
|
112
266
|
return;
|
|
267
|
+
if (type === 'step-finish') {
|
|
268
|
+
const cp = upsertPart(msg, part.id, 'step');
|
|
269
|
+
cp.step = {
|
|
270
|
+
tokensIn: part.tokens?.input ?? 0,
|
|
271
|
+
tokensOut: part.tokens?.output ?? 0,
|
|
272
|
+
cost: part.cost ?? 0,
|
|
273
|
+
};
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
113
276
|
if (type === 'tool') {
|
|
114
277
|
const cp = upsertPart(msg, part.id, 'tool');
|
|
115
278
|
cp.text = part.state?.title ?? part.tool ?? 'tool';
|
|
116
|
-
cp.tool = {
|
|
279
|
+
cp.tool = {
|
|
280
|
+
name: part.tool ?? 'tool',
|
|
281
|
+
status: part.state?.status ?? 'running',
|
|
282
|
+
input: part.state?.input,
|
|
283
|
+
output: String(part.state?.output ?? part.state?.error ?? ''),
|
|
284
|
+
};
|
|
285
|
+
return;
|
|
117
286
|
}
|
|
118
|
-
|
|
287
|
+
if (typeof part.text === 'string') {
|
|
119
288
|
upsertPart(msg, part.id, type === 'reasoning' ? 'reasoning' : 'text').text = part.text;
|
|
120
289
|
}
|
|
121
290
|
}
|
|
@@ -126,7 +295,70 @@ export function pushUserMessage(prev, text) {
|
|
|
126
295
|
{ id: PENDING_USER, role: 'user', parts: [{ id: 'p0', kind: 'text', text }] },
|
|
127
296
|
],
|
|
128
297
|
busy: true,
|
|
129
|
-
|
|
298
|
+
permissions: prev.permissions,
|
|
299
|
+
toasts: prev.toasts,
|
|
300
|
+
todos: [],
|
|
301
|
+
files: [],
|
|
302
|
+
retry: null,
|
|
303
|
+
error: null,
|
|
304
|
+
diff: [],
|
|
130
305
|
};
|
|
131
306
|
}
|
|
307
|
+
export function summarizeToolInput(input) {
|
|
308
|
+
if (!input)
|
|
309
|
+
return '';
|
|
310
|
+
const keys = ['filePath', 'file_path', 'command', 'pattern', 'query', 'url', 'path', 'prompt', 'description'];
|
|
311
|
+
for (const k of keys)
|
|
312
|
+
if (typeof input[k] === 'string' && input[k])
|
|
313
|
+
return String(input[k]);
|
|
314
|
+
const first = Object.values(input).find((v) => typeof v === 'string' && v);
|
|
315
|
+
return first ? String(first) : '';
|
|
316
|
+
}
|
|
317
|
+
export function messageUsage(msg) {
|
|
318
|
+
const steps = msg.parts.filter((p) => !!p.step);
|
|
319
|
+
if (steps.length === 0)
|
|
320
|
+
return null;
|
|
321
|
+
return steps.reduce((acc, s) => ({
|
|
322
|
+
tokensIn: acc.tokensIn + s.step.tokensIn,
|
|
323
|
+
tokensOut: acc.tokensOut + s.step.tokensOut,
|
|
324
|
+
cost: acc.cost + s.step.cost,
|
|
325
|
+
}), { tokensIn: 0, tokensOut: 0, cost: 0 });
|
|
326
|
+
}
|
|
327
|
+
function idleAssistantText(state) {
|
|
328
|
+
if (state.busy || state.permissions.length > 0)
|
|
329
|
+
return null;
|
|
330
|
+
const last = state.messages[state.messages.length - 1];
|
|
331
|
+
if (!last || last.role !== 'assistant')
|
|
332
|
+
return null;
|
|
333
|
+
const text = last.parts
|
|
334
|
+
.filter((p) => p.kind === 'text')
|
|
335
|
+
.map((p) => p.text)
|
|
336
|
+
.join('')
|
|
337
|
+
.replace(/```[\s\S]*?```/g, '')
|
|
338
|
+
.trim();
|
|
339
|
+
return text || null;
|
|
340
|
+
}
|
|
341
|
+
export function pendingQuestion(state) {
|
|
342
|
+
const text = idleAssistantText(state);
|
|
343
|
+
if (!text)
|
|
344
|
+
return null;
|
|
345
|
+
const lines = text.split('\n').map((l) => l.trim()).filter(Boolean);
|
|
346
|
+
const lastLine = lines.at(-1) ?? '';
|
|
347
|
+
if (/\?["'`)\]]*$/.test(lastLine))
|
|
348
|
+
return lastLine;
|
|
349
|
+
const qLine = [...lines].reverse().find((l) => /\?["'`)\]]*$/.test(l));
|
|
350
|
+
return qLine ?? null;
|
|
351
|
+
}
|
|
352
|
+
export function questionOptions(state) {
|
|
353
|
+
const text = idleAssistantText(state);
|
|
354
|
+
if (!text || !text.includes('?'))
|
|
355
|
+
return [];
|
|
356
|
+
const opts = [];
|
|
357
|
+
for (const raw of text.split('\n')) {
|
|
358
|
+
const m = /^\s*(?:\d{1,2}[.)]|[-*]\s*\[[ xX]?\]|[a-zA-Z][.)])\s+(.{2,120}?)\s*$/.exec(raw);
|
|
359
|
+
if (m?.[1])
|
|
360
|
+
opts.push(m[1].trim());
|
|
361
|
+
}
|
|
362
|
+
return opts.length >= 2 ? opts.slice(0, 8) : [];
|
|
363
|
+
}
|
|
132
364
|
//# sourceMappingURL=state.js.map
|
package/dist/tui/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { render } from 'ink-testing-library';
|
|
2
|
+
const ANSI = /\x1b\[[0-9;]*m/g;
|
|
3
|
+
export const stripAnsi = (s) => (s ?? '').replace(ANSI, '');
|
|
4
|
+
export async function waitForFrame(frame, predicate, { timeoutMs = 2000, intervalMs = 10 } = {}) {
|
|
5
|
+
const deadline = Date.now() + timeoutMs;
|
|
6
|
+
let last = stripAnsi(frame());
|
|
7
|
+
while (Date.now() < deadline) {
|
|
8
|
+
last = stripAnsi(frame());
|
|
9
|
+
if (predicate(last))
|
|
10
|
+
return last;
|
|
11
|
+
await new Promise((r) => setTimeout(r, intervalMs));
|
|
12
|
+
}
|
|
13
|
+
throw new Error(`waitForFrame: condição não bateu em ${timeoutMs}ms.\n─── último frame ───\n${last}\n────────────────────`);
|
|
14
|
+
}
|
|
15
|
+
export function waitForText(frame, needles, opts) {
|
|
16
|
+
const list = Array.isArray(needles) ? needles : [needles];
|
|
17
|
+
return waitForFrame(frame, (f) => list.every((n) => f.includes(n)), opts);
|
|
18
|
+
}
|
|
19
|
+
export async function frameOf(el) {
|
|
20
|
+
const { lastFrame } = render(el);
|
|
21
|
+
await new Promise((r) => setTimeout(r, 25));
|
|
22
|
+
return stripAnsi(lastFrame());
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=test-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/tui/test-utils.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAS7C,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC/B,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAqB,EAAU,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AAGxF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAA+B,EAC/B,SAAiC,EACjC,EAAE,SAAS,GAAG,IAAI,EAAE,UAAU,GAAG,EAAE,KAAkD,EAAE;IAEvF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACxC,IAAI,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9B,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,IAAI,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1B,IAAI,SAAS,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACjC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC;IACtD,CAAC;IACD,MAAM,IAAI,KAAK,CACb,uCAAuC,SAAS,8BAA8B,IAAI,wBAAwB,CAC3G,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,WAAW,CACzB,KAA+B,EAC/B,OAA0B,EAC1B,IAAkD;IAElD,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC1D,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC5E,CAAC;AAGD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAsB;IAClD,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;IAEjC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IAC5C,OAAO,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/version.js
CHANGED
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import { readFileSync } from 'node:fs';
|
|
2
2
|
import { fileURLToPath } from 'node:url';
|
|
3
3
|
import { dirname, join } from 'node:path';
|
|
4
|
-
function
|
|
4
|
+
function loadPkg() {
|
|
5
5
|
try {
|
|
6
6
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
|
|
8
|
-
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
9
|
-
return pkg.version;
|
|
7
|
+
return JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf-8'));
|
|
10
8
|
}
|
|
11
9
|
catch {
|
|
12
|
-
return '0.0.0';
|
|
10
|
+
return { version: '0.0.0' };
|
|
13
11
|
}
|
|
14
12
|
}
|
|
15
|
-
|
|
13
|
+
const pkg = loadPkg();
|
|
14
|
+
export const VERSION = pkg.version;
|
|
15
|
+
export function semverGt(a, b) {
|
|
16
|
+
const pa = a.split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);
|
|
17
|
+
const pb = b.split('-')[0].split('.').map((n) => parseInt(n, 10) || 0);
|
|
18
|
+
for (let i = 0; i < 3; i++) {
|
|
19
|
+
if ((pa[i] ?? 0) > (pb[i] ?? 0))
|
|
20
|
+
return true;
|
|
21
|
+
if ((pa[i] ?? 0) < (pb[i] ?? 0))
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
export const OPENCODE_SDK_VERSION = pkg.dependencies?.['@opencode-ai/sdk']?.replace(/^[\^~]/, '') ?? null;
|
|
16
27
|
//# sourceMappingURL=version.js.map
|
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAO1C,SAAS,OAAO;IACd,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QACrD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CAAQ,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;AAEtB,MAAM,CAAC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;AAGnC,MAAM,UAAU,QAAQ,CAAC,CAAS,EAAE,CAAS;IAC3C,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC7C,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAChD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAQD,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,kBAAkB,CAAC,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC"}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
#
|
|
2
|
-
# Substitui os 3 composes antigos (docker/ + kong/ + headroom/). O gateway agora
|
|
3
|
-
# é container (Dockerfile.gateway) e o Kong o alcança por NOME na rede, sem
|
|
4
|
-
# host.docker.internal. Ver docs/container-architecture.md.
|
|
1
|
+
# Compose file for NIO CLI (dockerized) - T3
|
|
5
2
|
name: nio
|
|
6
3
|
|
|
7
4
|
networks:
|
|
8
5
|
nio-net:
|
|
9
6
|
name: nio-net
|
|
10
7
|
driver: bridge
|
|
8
|
+
nio-infra:
|
|
9
|
+
name: nio-infra
|
|
10
|
+
driver: bridge
|
|
11
11
|
|
|
12
12
|
volumes:
|
|
13
13
|
nio_portainer_data: { name: nio_portainer_data }
|
|
@@ -16,8 +16,8 @@ volumes:
|
|
|
16
16
|
services:
|
|
17
17
|
nio-gateway:
|
|
18
18
|
build:
|
|
19
|
-
context: ..
|
|
20
|
-
dockerfile: Dockerfile.gateway
|
|
19
|
+
context: ..
|
|
20
|
+
dockerfile: Dockerfile.gateway
|
|
21
21
|
image: nio-gateway:local
|
|
22
22
|
container_name: nio-gateway
|
|
23
23
|
restart: unless-stopped
|
|
@@ -47,38 +47,68 @@ services:
|
|
|
47
47
|
volumes: [ "nio_headroom_cache:/root/.headroom" ]
|
|
48
48
|
networks: [ nio-net ]
|
|
49
49
|
|
|
50
|
+
kong:
|
|
51
|
+
image: kong@sha256:2a8cf3b110cdaba1cb00adc665b8635ed1fc75c907f7a4298613c68e4976de0a # kong:3.9, pinado 2026-09-03
|
|
52
|
+
container_name: nio-kong
|
|
53
|
+
restart: unless-stopped
|
|
54
|
+
environment:
|
|
55
|
+
KONG_DATABASE: "off"
|
|
56
|
+
KONG_DECLARATIVE_CONFIG: /kong/kong.yml
|
|
57
|
+
KONG_PROXY_LISTEN: "0.0.0.0:8000"
|
|
58
|
+
# Admin API desligada (auditoria M-7) — config é declarativa (kong.yml),
|
|
59
|
+
# nada chama o admin em runtime.
|
|
60
|
+
KONG_ADMIN_LISTEN: "off"
|
|
61
|
+
volumes: [ "./kong.yml:/kong/kong.yml:ro" ] # docker/kong.yml (T3)
|
|
62
|
+
ports:
|
|
63
|
+
- "127.0.0.1:${NIO_KONG_PROXY_PORT:-8000}:8000" # sem colisão: Portainer largou :8000
|
|
64
|
+
depends_on:
|
|
65
|
+
nio-gateway: { condition: service_healthy }
|
|
66
|
+
networks: [ nio-net ]
|
|
67
|
+
|
|
68
|
+
# ── plano de infra (toca o docker.sock) — rede nio-infra ─────────────
|
|
69
|
+
|
|
50
70
|
mcp-gateway:
|
|
51
71
|
image: docker/mcp-gateway@sha256:f5a679a05fc39022a046167bef92aeeb01bcd59485ad27843ae5227db7950688 # docker/mcp-gateway:latest, pinado 2026-09-03
|
|
52
72
|
container_name: nio-mcp-gateway
|
|
53
73
|
restart: unless-stopped
|
|
54
74
|
command: ["--transport=streaming", "--port=8811", "--servers=docker"]
|
|
55
75
|
ports: [ "127.0.0.1:8811:8811" ]
|
|
76
|
+
# Mount DIRETO de propósito: o `--servers=docker` existe pra CRIAR containers
|
|
77
|
+
# (tools de Docker pro operador de IA). Um proxy que permita isso é a própria
|
|
78
|
+
# fuga — então a contenção aqui é: rede isolada + rodar opt-in
|
|
79
|
+
# (`nio docker toolkit up/down`). Contenção real = daemon dedicado (backlog).
|
|
56
80
|
volumes: [ "/var/run/docker.sock:/var/run/docker.sock" ]
|
|
57
|
-
networks: [ nio-
|
|
81
|
+
networks: [ nio-infra ]
|
|
82
|
+
|
|
83
|
+
docker-socket-proxy:
|
|
84
|
+
image: ghcr.io/tecnativa/docker-socket-proxy:0.3.0@sha256:9e4b9e7517a6b660f2cc903a19b257b1852d5b3344794e3ea334ff00ae677ac2
|
|
85
|
+
container_name: nio-docker-proxy
|
|
86
|
+
restart: unless-stopped
|
|
87
|
+
environment:
|
|
88
|
+
# GET-only: sem POST → ninguém cria/inicia/exec container através dele.
|
|
89
|
+
CONTAINERS: 1
|
|
90
|
+
IMAGES: 1
|
|
91
|
+
NETWORKS: 1
|
|
92
|
+
VOLUMES: 1
|
|
93
|
+
INFO: 1
|
|
94
|
+
VERSION: 1
|
|
95
|
+
PING: 1
|
|
96
|
+
# POST/EXEC/AUTH/SECRETS/CONFIGS/SWARM/SERVICES/SYSTEM/PLUGINS: 0 (default).
|
|
97
|
+
volumes: [ "/var/run/docker.sock:/var/run/docker.sock:ro" ]
|
|
98
|
+
networks: [ nio-infra ]
|
|
58
99
|
|
|
59
100
|
portainer:
|
|
60
101
|
image: portainer/portainer-ce@sha256:511f3f06c96fe3b993ebeaafde311c1959cae73a7ef825dba6397d51b450dffa # portainer-ce:lts, pinado 2026-09-03
|
|
61
102
|
container_name: nio-portainer
|
|
62
103
|
restart: unless-stopped
|
|
104
|
+
# Fala com o daemon SÓ pelo proxy GET-only (auditoria M-8) — não monta o
|
|
105
|
+
# docker.sock. Efeito: dashboard read-mostly (vê containers/logs/stats/redes;
|
|
106
|
+
# não sobe/derruba pela UI). Se o time precisar gerenciar pela UI, ligue
|
|
107
|
+
# `POST: 1` no docker-socket-proxy — mas aí Portainer volta a poder criar
|
|
108
|
+
# container = root no host.
|
|
109
|
+
command: -H tcp://docker-socket-proxy:2375
|
|
63
110
|
ports: [ "127.0.0.1:9443:9443" ] # UI (edge :8000 REMOVIDO — libera p/ Kong)
|
|
64
111
|
volumes:
|
|
65
|
-
- "/var/run/docker.sock:/var/run/docker.sock"
|
|
66
112
|
- "nio_portainer_data:/data"
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
kong:
|
|
70
|
-
image: kong@sha256:2a8cf3b110cdaba1cb00adc665b8635ed1fc75c907f7a4298613c68e4976de0a # kong:3.9, pinado 2026-09-03
|
|
71
|
-
container_name: nio-kong
|
|
72
|
-
restart: unless-stopped
|
|
73
|
-
environment:
|
|
74
|
-
KONG_DATABASE: "off"
|
|
75
|
-
KONG_DECLARATIVE_CONFIG: /kong/kong.yml
|
|
76
|
-
KONG_PROXY_LISTEN: "0.0.0.0:8000"
|
|
77
|
-
KONG_ADMIN_LISTEN: "0.0.0.0:8001"
|
|
78
|
-
volumes: [ "./kong.yml:/kong/kong.yml:ro" ] # docker/kong.yml (T3)
|
|
79
|
-
ports:
|
|
80
|
-
- "127.0.0.1:${NIO_KONG_PROXY_PORT:-8000}:8000" # sem colisão: Portainer largou :8000
|
|
81
|
-
- "127.0.0.1:${NIO_KONG_ADMIN_PORT:-8001}:8001"
|
|
82
|
-
depends_on:
|
|
83
|
-
nio-gateway: { condition: service_healthy }
|
|
84
|
-
networks: [ nio-net ]
|
|
113
|
+
depends_on: [ docker-socket-proxy ]
|
|
114
|
+
networks: [ nio-infra ]
|
package/docker/kong.yml
CHANGED
|
@@ -5,6 +5,16 @@ services:
|
|
|
5
5
|
- name: nio-gateway
|
|
6
6
|
url: http://nio-gateway:3000
|
|
7
7
|
routes:
|
|
8
|
+
# /register (TP-1) — cria usuário; rate-limit apertado.
|
|
9
|
+
- name: nio-gateway-register
|
|
10
|
+
paths:
|
|
11
|
+
- /register
|
|
12
|
+
strip_path: false
|
|
13
|
+
plugins:
|
|
14
|
+
- name: rate-limiting
|
|
15
|
+
config:
|
|
16
|
+
minute: 5
|
|
17
|
+
policy: local
|
|
8
18
|
# /login — alvo de brute-force; rate-limit apertado.
|
|
9
19
|
- name: nio-gateway-login
|
|
10
20
|
paths:
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nio-cli/cli",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Orquestrador de ambientes de desenvolvimento: escolhe um perfil, responde um wizard e a CLI (com auxílio de IA via MCP) materializa toolchains, linguagens, frameworks, dotfiles e IDE.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -50,7 +50,10 @@
|
|
|
50
50
|
"build": "rm -rf dist && tsc && node --input-type=commonjs -e \"const fs=require('fs');fs.cpSync('src/cli/copy','dist/cli/copy',{recursive:true});for(const f of ['cli.js','mcp-server.js','gateway/index.js','mcp-server-lang.js'])fs.chmodSync('dist/'+f,0o755)\"",
|
|
51
51
|
"gen:docs": "bun run scripts/gen-reference.ts",
|
|
52
52
|
"db:ping": "bun run scripts/db-ping.ts",
|
|
53
|
-
"
|
|
53
|
+
"db:tls": "bash scripts/db-tls-setup.sh",
|
|
54
|
+
"db:migrate": "bun run scripts/migrate.ts",
|
|
55
|
+
"argon2:calibrate": "node scripts/argon2-calibrate.mjs",
|
|
56
|
+
"dev:whatsapp-echo": "bun run scripts/whatsapp-echo.ts",
|
|
54
57
|
"dev:cli": "bun run src/cli.ts",
|
|
55
58
|
"dev:mcp": "bun run src/mcp-server.ts",
|
|
56
59
|
"dev:gateway": "bun run src/gateway/index.ts",
|
|
@@ -59,11 +62,11 @@
|
|
|
59
62
|
"prepublishOnly": "npm run build"
|
|
60
63
|
},
|
|
61
64
|
"dependencies": {
|
|
62
|
-
"@clack/prompts": "^1.
|
|
63
|
-
"@modelcontextprotocol/sdk": "^1.0
|
|
64
|
-
"@node-rs/argon2": "^2.
|
|
65
|
+
"@clack/prompts": "^1.7.0",
|
|
66
|
+
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
67
|
+
"@node-rs/argon2": "^2.2.0",
|
|
65
68
|
"@opencode-ai/sdk": "1.18.25",
|
|
66
|
-
"adm-zip": "^0.
|
|
69
|
+
"adm-zip": "^0.6.0",
|
|
67
70
|
"boxen": "^7.1.1",
|
|
68
71
|
"chalk": "^5.6.2",
|
|
69
72
|
"commander": "^12.1.0",
|
|
@@ -71,18 +74,24 @@
|
|
|
71
74
|
"jsonwebtoken": "^9.0.3",
|
|
72
75
|
"pg": "^8.23.0",
|
|
73
76
|
"react": "^18.3.1",
|
|
74
|
-
"smol-toml": "^1.
|
|
77
|
+
"smol-toml": "^1.8.0",
|
|
75
78
|
"update-notifier": "^7.3.1",
|
|
76
|
-
"zod": "^4.4
|
|
79
|
+
"zod": "^4.5.4"
|
|
80
|
+
},
|
|
81
|
+
"//overrides": "transitivas de @modelcontextprotocol/sdk (transporte HTTP — NIO usa só stdio). Força as versões corrigidas p/ deixar o `bun audit` limpo; ranges compatíveis com os pais.",
|
|
82
|
+
"overrides": {
|
|
83
|
+
"fast-uri": "^3.1.7",
|
|
84
|
+
"hono": "^4.13.7",
|
|
85
|
+
"qs": "^6.16.0"
|
|
77
86
|
},
|
|
78
87
|
"devDependencies": {
|
|
79
88
|
"@types/adm-zip": "^0.5.8",
|
|
80
89
|
"@types/jsonwebtoken": "^9.0.10",
|
|
81
|
-
"@types/node": "^22.
|
|
90
|
+
"@types/node": "^22.20.1",
|
|
82
91
|
"@types/pg": "^8.23.1",
|
|
83
|
-
"@types/react": "^18.3",
|
|
92
|
+
"@types/react": "^18.3.31",
|
|
84
93
|
"@types/update-notifier": "^6.0.8",
|
|
85
|
-
"ink-testing-library": "^4",
|
|
86
|
-
"typescript": "^5.
|
|
94
|
+
"ink-testing-library": "^4.0.0",
|
|
95
|
+
"typescript": "^5.9.3"
|
|
87
96
|
}
|
|
88
97
|
}
|