@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.
Files changed (103) hide show
  1. package/.env.example +22 -9
  2. package/README.md +186 -78
  3. package/dist/adapters/pg/client.js +2 -0
  4. package/dist/adapters/pg/client.js.map +1 -1
  5. package/dist/adapters/pg/login-challenge-repository.js.map +1 -1
  6. package/dist/adapters/sms/whatsapp.js +83 -0
  7. package/dist/adapters/sms/whatsapp.js.map +1 -0
  8. package/dist/app/ai-client.js +2 -2
  9. package/dist/app/ai-client.js.map +1 -1
  10. package/dist/cli/commands/ai.js +2 -2
  11. package/dist/cli/commands/ai.js.map +1 -1
  12. package/dist/cli/commands/auth.js +5 -5
  13. package/dist/cli/commands/auth.js.map +1 -1
  14. package/dist/cli/commands/config.js +17 -7
  15. package/dist/cli/commands/config.js.map +1 -1
  16. package/dist/cli/commands/docs/content.js +80 -11
  17. package/dist/cli/commands/docs/content.js.map +1 -1
  18. package/dist/cli/commands/exec.js +1 -12
  19. package/dist/cli/commands/exec.js.map +1 -1
  20. package/dist/cli/commands/init/index.js +1 -2
  21. package/dist/cli/commands/init/index.js.map +1 -1
  22. package/dist/cli/commands/init/provision-step.js +2 -20
  23. package/dist/cli/commands/init/provision-step.js.map +1 -1
  24. package/dist/cli/commands/plan.js +1 -12
  25. package/dist/cli/commands/plan.js.map +1 -1
  26. package/dist/cli/commands/security.js +15 -15
  27. package/dist/cli/commands/security.js.map +1 -1
  28. package/dist/cli/commands/sync.js +4 -18
  29. package/dist/cli/commands/sync.js.map +1 -1
  30. package/dist/cli/commands/validate-plan.js +1 -10
  31. package/dist/cli/commands/validate-plan.js.map +1 -1
  32. package/dist/cli/copy/flows.json +1 -2
  33. package/dist/cli/copy.js.map +1 -1
  34. package/dist/cli/flows/dependencies.js +0 -4
  35. package/dist/cli/flows/dependencies.js.map +1 -1
  36. package/dist/cli/help-guide.js +69 -0
  37. package/dist/cli/help-guide.js.map +1 -0
  38. package/dist/cli/program.js +3 -3
  39. package/dist/cli/program.js.map +1 -1
  40. package/dist/cli/ui/render.js +0 -27
  41. package/dist/cli/ui/render.js.map +1 -1
  42. package/dist/cli.js +10 -2
  43. package/dist/cli.js.map +1 -1
  44. package/dist/gateway/services/login.js +6 -7
  45. package/dist/gateway/services/login.js.map +1 -1
  46. package/dist/gateway/services/security.js +6 -6
  47. package/dist/gateway/services/security.js.map +1 -1
  48. package/dist/lib/auth/gateway-token.js +3 -0
  49. package/dist/lib/auth/gateway-token.js.map +1 -1
  50. package/dist/lib/auth/nio-config.js +28 -0
  51. package/dist/lib/auth/nio-config.js.map +1 -1
  52. package/dist/lib/clients/client-configs.js +81 -86
  53. package/dist/lib/clients/client-configs.js.map +1 -1
  54. package/dist/lib/deps/dependencies.js +0 -25
  55. package/dist/lib/deps/dependencies.js.map +1 -1
  56. package/dist/lib/deps/dependency-install.js +3 -23
  57. package/dist/lib/deps/dependency-install.js.map +1 -1
  58. package/dist/lib/exec/exec-delegate.js +69 -48
  59. package/dist/lib/exec/exec-delegate.js.map +1 -1
  60. package/dist/lib/exec/plan-delegate.js +25 -34
  61. package/dist/lib/exec/plan-delegate.js.map +1 -1
  62. package/dist/lib/exec/qwen-client.js +74 -0
  63. package/dist/lib/exec/qwen-client.js.map +1 -0
  64. package/dist/lib/exec/validate-plan-delegate.js +13 -30
  65. package/dist/lib/exec/validate-plan-delegate.js.map +1 -1
  66. package/dist/lib/provision/provision.js +2 -2
  67. package/dist/lib/provision/provision.js.map +1 -1
  68. package/dist/lib/skills/patterns.js +15 -24
  69. package/dist/lib/skills/patterns.js.map +1 -1
  70. package/dist/lib/skills/skills.js +1 -1
  71. package/dist/lib/skills/skills.js.map +1 -1
  72. package/dist/mcp-server.js +0 -15
  73. package/dist/mcp-server.js.map +1 -1
  74. package/dist/tools/delegate-exec.js +3 -10
  75. package/dist/tools/delegate-exec.js.map +1 -1
  76. package/dist/tools/plan.js +6 -13
  77. package/dist/tools/plan.js.map +1 -1
  78. package/dist/tools/validate-plan.js +6 -14
  79. package/dist/tools/validate-plan.js.map +1 -1
  80. package/dist/tui/app.js +102 -18
  81. package/dist/tui/app.js.map +1 -1
  82. package/dist/tui/components.js +161 -88
  83. package/dist/tui/components.js.map +1 -1
  84. package/dist/tui/launch.js.map +1 -1
  85. package/dist/tui/opencode.js +27 -0
  86. package/dist/tui/opencode.js.map +1 -1
  87. package/dist/tui/palette.js +12 -5
  88. package/dist/tui/palette.js.map +1 -1
  89. package/dist/tui/prompt-input.js +168 -0
  90. package/dist/tui/prompt-input.js.map +1 -0
  91. package/dist/tui/state.js +252 -20
  92. package/dist/tui/state.js.map +1 -1
  93. package/dist/tui/test-utils.js +24 -0
  94. package/dist/tui/test-utils.js.map +1 -0
  95. package/package.json +2 -2
  96. package/dist/adapters/sms/http-generic.js +0 -71
  97. package/dist/adapters/sms/http-generic.js.map +0 -1
  98. package/dist/cli/commands/clean.js +0 -108
  99. package/dist/cli/commands/clean.js.map +0 -1
  100. package/dist/lib/clients/hooks.js +0 -191
  101. package/dist/lib/clients/hooks.js.map +0 -1
  102. package/dist/lib/exec/exec-engines.js +0 -63
  103. 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 const emptyChat = { messages: [], busy: false, permission: null };
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
- permission: prev.permission,
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 perm = p;
49
- if (perm.id && perm.sessionID) {
50
- const what = perm.patterns?.length ? ` ${perm.patterns.join(', ')}` : '';
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
- state.permission = null;
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.status':
79
- if (p.status?.type === 'idle')
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 = { messages: [], busy, permission: prev.permission };
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' || type === 'step-finish')
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 = { status: part.state?.status ?? 'running', output: String(part.state?.output ?? part.state?.error ?? '') };
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
- else if (typeof part.text === 'string') {
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
- permission: prev.permission,
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
@@ -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.4.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:sms-echo": "bun run scripts/sms-echo.ts",
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",