@nio-cli/cli 0.4.0 → 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 +22 -9
- package/README.md +186 -78
- package/dist/adapters/pg/client.js +2 -0
- package/dist/adapters/pg/client.js.map +1 -1
- package/dist/adapters/pg/login-challenge-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/cli/commands/ai.js +2 -2
- package/dist/cli/commands/ai.js.map +1 -1
- package/dist/cli/commands/auth.js +5 -5
- 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/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 +15 -15
- package/dist/cli/commands/security.js.map +1 -1
- package/dist/cli/commands/sync.js +4 -18
- 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/services/login.js +6 -7
- package/dist/gateway/services/login.js.map +1 -1
- package/dist/gateway/services/security.js +6 -6
- package/dist/gateway/services/security.js.map +1 -1
- package/dist/lib/auth/gateway-token.js +3 -0
- package/dist/lib/auth/gateway-token.js.map +1 -1
- package/dist/lib/auth/nio-config.js +28 -0
- package/dist/lib/auth/nio-config.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/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/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.js +1 -1
- package/dist/lib/skills/skills.js.map +1 -1
- package/dist/mcp-server.js +0 -15
- 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.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/package.json +2 -2
- package/dist/adapters/sms/http-generic.js +0 -71
- 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
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import React from 'react';
|
|
3
|
+
import { Box, Text, useInput } from 'ink';
|
|
4
|
+
import { theme, sym } from './theme.js';
|
|
5
|
+
export function layoutRows(value, width) {
|
|
6
|
+
const w = Math.max(1, width);
|
|
7
|
+
const rows = [];
|
|
8
|
+
let offset = 0;
|
|
9
|
+
for (const seg of value.split('\n')) {
|
|
10
|
+
if (seg.length === 0) {
|
|
11
|
+
rows.push({ text: '', start: offset });
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
for (let j = 0; j < seg.length; j += w)
|
|
15
|
+
rows.push({ text: seg.slice(j, j + w), start: offset + j });
|
|
16
|
+
}
|
|
17
|
+
offset += seg.length + 1;
|
|
18
|
+
}
|
|
19
|
+
return rows;
|
|
20
|
+
}
|
|
21
|
+
export function cursorRowCol(rows, cursor) {
|
|
22
|
+
let row = 0;
|
|
23
|
+
for (let i = 0; i < rows.length; i++) {
|
|
24
|
+
if (rows[i].start <= cursor)
|
|
25
|
+
row = i;
|
|
26
|
+
else
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
return { row, col: cursor - (rows[row]?.start ?? 0) };
|
|
30
|
+
}
|
|
31
|
+
export function moveVertical(value, cursor, width, dir) {
|
|
32
|
+
const rows = layoutRows(value, width);
|
|
33
|
+
const { row, col } = cursorRowCol(rows, cursor);
|
|
34
|
+
const target = dir === 'up' ? row - 1 : row + 1;
|
|
35
|
+
if (target < 0 || target >= rows.length)
|
|
36
|
+
return null;
|
|
37
|
+
const r = rows[target];
|
|
38
|
+
return r.start + Math.min(col, r.text.length);
|
|
39
|
+
}
|
|
40
|
+
const isWs = (ch) => !!ch && /\s/.test(ch);
|
|
41
|
+
export function wordLeft(value, cursor) {
|
|
42
|
+
let i = cursor;
|
|
43
|
+
while (i > 0 && isWs(value[i - 1]))
|
|
44
|
+
i--;
|
|
45
|
+
while (i > 0 && !isWs(value[i - 1]))
|
|
46
|
+
i--;
|
|
47
|
+
return i;
|
|
48
|
+
}
|
|
49
|
+
export function wordRight(value, cursor) {
|
|
50
|
+
let i = cursor;
|
|
51
|
+
while (i < value.length && isWs(value[i]))
|
|
52
|
+
i++;
|
|
53
|
+
while (i < value.length && !isWs(value[i]))
|
|
54
|
+
i++;
|
|
55
|
+
return i;
|
|
56
|
+
}
|
|
57
|
+
export function deleteWordBefore(value, cursor) {
|
|
58
|
+
const i = wordLeft(value, cursor);
|
|
59
|
+
return { value: value.slice(0, i) + value.slice(cursor), cursor: i };
|
|
60
|
+
}
|
|
61
|
+
export function lineStart(value, cursor) {
|
|
62
|
+
const nl = value.lastIndexOf('\n', cursor - 1);
|
|
63
|
+
return nl < 0 ? 0 : nl + 1;
|
|
64
|
+
}
|
|
65
|
+
export function lineEnd(value, cursor) {
|
|
66
|
+
const nl = value.indexOf('\n', cursor);
|
|
67
|
+
return nl < 0 ? value.length : nl;
|
|
68
|
+
}
|
|
69
|
+
export function sanitizePaste(input) {
|
|
70
|
+
return Array.from(input.replace(/\r\n?/g, '\n').replace(/\t/g, ' '))
|
|
71
|
+
.filter((ch) => ch === '\n' || ch >= ' ')
|
|
72
|
+
.join('');
|
|
73
|
+
}
|
|
74
|
+
export function PromptInput({ value, onChange, onSubmit, navCapture = false, onNav, onTab, disabled = false, active = true, width, maxRows = 6, placeholder = '', borderColor = theme.accent, }) {
|
|
75
|
+
const [cursor, setCursor] = React.useState(value.length);
|
|
76
|
+
React.useEffect(() => {
|
|
77
|
+
setCursor((c) => Math.min(c, value.length));
|
|
78
|
+
}, [value.length]);
|
|
79
|
+
const wrapW = Math.max(8, width);
|
|
80
|
+
const edit = (nextValue, nextCursor) => {
|
|
81
|
+
onChange(nextValue);
|
|
82
|
+
setCursor(Math.max(0, Math.min(nextCursor, nextValue.length)));
|
|
83
|
+
};
|
|
84
|
+
const insert = (text) => edit(value.slice(0, cursor) + text + value.slice(cursor), cursor + text.length);
|
|
85
|
+
useInput((input, key) => {
|
|
86
|
+
if (navCapture) {
|
|
87
|
+
if (key.upArrow)
|
|
88
|
+
return onNav?.('up');
|
|
89
|
+
if (key.downArrow)
|
|
90
|
+
return onNav?.('down');
|
|
91
|
+
if (key.return)
|
|
92
|
+
return onNav?.('submit');
|
|
93
|
+
if (key.escape)
|
|
94
|
+
return onNav?.('cancel');
|
|
95
|
+
}
|
|
96
|
+
if (key.leftArrow) {
|
|
97
|
+
return setCursor((c) => (key.meta || key.ctrl ? wordLeft(value, c) : Math.max(0, c - 1)));
|
|
98
|
+
}
|
|
99
|
+
if (key.rightArrow) {
|
|
100
|
+
return setCursor((c) => (key.meta || key.ctrl ? wordRight(value, c) : Math.min(value.length, c + 1)));
|
|
101
|
+
}
|
|
102
|
+
if (key.upArrow) {
|
|
103
|
+
const n = moveVertical(value, cursor, wrapW, 'up');
|
|
104
|
+
return n === null ? onNav?.('up') : setCursor(n);
|
|
105
|
+
}
|
|
106
|
+
if (key.downArrow) {
|
|
107
|
+
const n = moveVertical(value, cursor, wrapW, 'down');
|
|
108
|
+
return n === null ? undefined : setCursor(n);
|
|
109
|
+
}
|
|
110
|
+
if (key.ctrl && input === 'a')
|
|
111
|
+
return setCursor(lineStart(value, cursor));
|
|
112
|
+
if (key.ctrl && input === 'e')
|
|
113
|
+
return setCursor(lineEnd(value, cursor));
|
|
114
|
+
if (key.ctrl && input === 'w') {
|
|
115
|
+
const r = deleteWordBefore(value, cursor);
|
|
116
|
+
return edit(r.value, r.cursor);
|
|
117
|
+
}
|
|
118
|
+
if (key.ctrl && input === 'u') {
|
|
119
|
+
const s = lineStart(value, cursor);
|
|
120
|
+
return edit(value.slice(0, s) + value.slice(cursor), s);
|
|
121
|
+
}
|
|
122
|
+
if (key.ctrl && input === 'k') {
|
|
123
|
+
const e = lineEnd(value, cursor);
|
|
124
|
+
return edit(value.slice(0, cursor) + value.slice(e), cursor);
|
|
125
|
+
}
|
|
126
|
+
if (key.ctrl && input === 'j')
|
|
127
|
+
return insert('\n');
|
|
128
|
+
if (key.backspace || key.delete) {
|
|
129
|
+
if (cursor === 0)
|
|
130
|
+
return;
|
|
131
|
+
return edit(value.slice(0, cursor - 1) + value.slice(cursor), cursor - 1);
|
|
132
|
+
}
|
|
133
|
+
if (key.return) {
|
|
134
|
+
if (value.slice(0, cursor).endsWith('\\')) {
|
|
135
|
+
return edit(value.slice(0, cursor - 1) + '\n' + value.slice(cursor), cursor);
|
|
136
|
+
}
|
|
137
|
+
if (disabled)
|
|
138
|
+
return;
|
|
139
|
+
return onSubmit(value.trim());
|
|
140
|
+
}
|
|
141
|
+
if (key.escape)
|
|
142
|
+
return;
|
|
143
|
+
if (key.tab)
|
|
144
|
+
return onTab?.(key.shift ?? false);
|
|
145
|
+
if (key.ctrl || key.meta)
|
|
146
|
+
return;
|
|
147
|
+
const text = sanitizePaste(input);
|
|
148
|
+
if (text)
|
|
149
|
+
insert(text);
|
|
150
|
+
}, { isActive: active });
|
|
151
|
+
const rows = layoutRows(value, wrapW);
|
|
152
|
+
if (rows.length === 0)
|
|
153
|
+
rows.push({ text: '', start: 0 });
|
|
154
|
+
const { row: curRow, col: curCol } = cursorRowCol(rows, Math.min(cursor, value.length));
|
|
155
|
+
let first = 0;
|
|
156
|
+
if (rows.length > maxRows)
|
|
157
|
+
first = Math.max(0, Math.min(curRow - maxRows + 1, rows.length - maxRows));
|
|
158
|
+
const visible = rows.slice(first, first + maxRows);
|
|
159
|
+
const gutterColor = disabled || !active ? theme.dim : theme.accent;
|
|
160
|
+
const showPlaceholder = value.length === 0 && placeholder;
|
|
161
|
+
return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { flexDirection: "column", width: wrapW + 6, borderStyle: "round", borderColor: !active ? theme.dim : borderColor, paddingX: 1, children: visible.map((r, i) => {
|
|
162
|
+
const rowIdx = first + i;
|
|
163
|
+
const gutter = rowIdx === 0 ? `${sym.chevron} ` : ' ';
|
|
164
|
+
const onCursor = rowIdx === curRow && !navCapture && active;
|
|
165
|
+
return (_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: gutterColor, children: gutter }), onCursor ? (_jsxs(_Fragment, { children: [_jsx(Text, { children: r.text.slice(0, curCol) }), _jsx(Text, { inverse: true, children: r.text[curCol] ?? ' ' }), _jsx(Text, { children: r.text.slice(curCol + 1) })] })) : (_jsx(Text, { children: r.text || (showPlaceholder && rowIdx === 0 ? '' : ' ') })), showPlaceholder && rowIdx === 0 && _jsx(Text, { color: theme.dim, children: placeholder })] }, rowIdx));
|
|
166
|
+
}) }), rows.length > maxRows && (_jsxs(Text, { color: theme.dim, children: [' ', first > 0 ? `↑ ${first}` : '', first > 0 && first + maxRows < rows.length ? ' · ' : '', first + maxRows < rows.length ? `↓ ${rows.length - first - maxRows}` : '', ' linha(s) fora de vista'] }))] }));
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=prompt-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-input.js","sourceRoot":"","sources":["../../src/tui/prompt-input.tsx"],"names":[],"mappings":"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"}
|
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":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAuBlC,MAAM,CAAC,MAAM,SAAS,GAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;AACpF,MAAM,YAAY,GAAG,cAAc,CAAC;AAEpC,SAAS,KAAK,CAAC,IAAe;IAC5B,OAAO;QACL,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACrF,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAgB,EAAE,EAAU,EAAE,IAAyB;IAC5E,IAAI,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,GAAG,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,UAAU,CAAC,GAAgB,EAAE,EAAU,EAAE,IAAsB;IACtE,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IAC9C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QAC9B,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC;AAGD,SAAS,gBAAgB,CAAC,KAAgB,EAAE,MAAc;IACxD,IAAI,MAAM,KAAK,YAAY;QAAE,OAAO;IACpC,MAAM,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IACjE,IAAI,CAAC,IAAI,CAAC;QAAE,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED,SAAS,SAAS,CAAC,KAAgB,EAAE,GAA4B;IAC/D,MAAM,SAAS,GAAG,GAAG,CAAC,SAA+B,CAAC;IACtD,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO;IAClC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACnC,aAAa,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE,GAAG,CAAC,CAAC;AACnE,CAAC;AAGD,MAAM,UAAU,UAAU,CAAC,IAAe,EAAE,GAAU;IACpD,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,MAAM,CAAC,GAAI,GAAgD,CAAC,UAAU,IAAI,EAAE,CAAC;IAC7E,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;IAIzD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAc,CAAC;IACjC,IAAI,KAAK,KAAK,kBAAkB,IAAI,KAAK,KAAK,oBAAoB,EAAE,CAAC;QACnE,MAAM,IAAI,GAAG,CAGZ,CAAC;QACF,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACzE,KAAK,CAAC,UAAU,GAAG;gBACjB,EAAE,EAAE,IAAI,CAAC,EAAE;gBACX,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,KAAK,EAAE,IAAI,CAAC,KAAK,IAAI,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,MAAM,GAAG,IAAI,EAAE;aAC9E,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACjB,KAAK,iBAAiB,CAAC,CAAC,CAAC;YACvB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAmC,CAAC;YAC7D,IAAI,IAAI,CAAC,EAAE,EAAE,CAAC;gBACZ,gBAAgB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YAC7E,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,sBAAsB;YACzB,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAA4B,CAAC,CAAC;YAC3D,MAAM;QACR,KAAK,oBAAoB;YACvB,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YACxB,MAAM;QACR,KAAK,cAAc,CAAC;QACpB,KAAK,eAAe;YAClB,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;YACnB,MAAM;QACR,KAAK,gBAAgB;YACnB,IAAK,CAAC,CAAC,MAAwC,EAAE,IAAI,KAAK,MAAM;gBAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;YACrF,MAAM;QACR;YACE,MAAM;IACV,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAMD,MAAM,UAAU,YAAY,CAC1B,IAAe,EACf,GAA6F,EAC7F,IAAa;IAEb,MAAM,KAAK,GAAc,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;IAC7E,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC;QACpB,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE;YAAE,SAAS;QAC1B,MAAM,GAAG,GAAG,aAAa,CAAC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;QAC3F,KAAK,MAAM,GAAG,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE;YAAE,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IACjE,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC;QACtF,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,QAAQ,CAAC,CAAc,EAAE,CAAc;IAC9C,MAAM,CAAC,GAAG,CAAC,CAAc,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACzE,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACvB,CAAC;AAGD,SAAS,aAAa,CAAC,GAAgB,EAAE,GAA4B;IACnE,MAAM,IAAI,GAAG,GAGZ,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,EAAE;QAAE,OAAO;IACrB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;IACjC,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO;IAC5D,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC5C,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC;QACnD,EAAE,CAAC,IAAI,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;IACvH,CAAC;SAAM,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QACzC,UAAU,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;IACzF,CAAC;AACH,CAAC;AAGD,MAAM,UAAU,eAAe,CAAC,IAAe,EAAE,IAAY;IAC3D,OAAO;QACL,QAAQ,EAAE;YACR,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,YAAY,CAAC;YACrD,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE;SAC9E;QACD,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC;AACJ,CAAC"}
|
|
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/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",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"db:tls": "bash scripts/db-tls-setup.sh",
|
|
54
54
|
"db:migrate": "bun run scripts/migrate.ts",
|
|
55
55
|
"argon2:calibrate": "node scripts/argon2-calibrate.mjs",
|
|
56
|
-
"dev:
|
|
56
|
+
"dev:whatsapp-echo": "bun run scripts/whatsapp-echo.ts",
|
|
57
57
|
"dev:cli": "bun run src/cli.ts",
|
|
58
58
|
"dev:mcp": "bun run src/mcp-server.ts",
|
|
59
59
|
"dev:gateway": "bun run src/gateway/index.ts",
|