@nio-cli/cli 0.4.0 → 0.7.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 (111) hide show
  1. package/.env.example +24 -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/skill-serve.js +46 -13
  71. package/dist/lib/skills/skill-serve.js.map +1 -1
  72. package/dist/lib/skills/skills.js +1 -1
  73. package/dist/lib/skills/skills.js.map +1 -1
  74. package/dist/mcp-server.js +0 -15
  75. package/dist/mcp-server.js.map +1 -1
  76. package/dist/profiles/bi.js +2 -1
  77. package/dist/profiles/bi.js.map +1 -1
  78. package/dist/profiles/dba.js +2 -11
  79. package/dist/profiles/dba.js.map +1 -1
  80. package/dist/profiles/toolchains.js +49 -2
  81. package/dist/profiles/toolchains.js.map +1 -1
  82. package/dist/tools/delegate-exec.js +3 -10
  83. package/dist/tools/delegate-exec.js.map +1 -1
  84. package/dist/tools/plan.js +6 -13
  85. package/dist/tools/plan.js.map +1 -1
  86. package/dist/tools/validate-plan.js +6 -14
  87. package/dist/tools/validate-plan.js.map +1 -1
  88. package/dist/tui/app.js +102 -18
  89. package/dist/tui/app.js.map +1 -1
  90. package/dist/tui/components.js +161 -88
  91. package/dist/tui/components.js.map +1 -1
  92. package/dist/tui/launch.js.map +1 -1
  93. package/dist/tui/opencode.js +27 -0
  94. package/dist/tui/opencode.js.map +1 -1
  95. package/dist/tui/palette.js +12 -5
  96. package/dist/tui/palette.js.map +1 -1
  97. package/dist/tui/prompt-input.js +168 -0
  98. package/dist/tui/prompt-input.js.map +1 -0
  99. package/dist/tui/state.js +252 -20
  100. package/dist/tui/state.js.map +1 -1
  101. package/dist/tui/test-utils.js +24 -0
  102. package/dist/tui/test-utils.js.map +1 -0
  103. package/package.json +2 -2
  104. package/dist/adapters/sms/http-generic.js +0 -71
  105. package/dist/adapters/sms/http-generic.js.map +0 -1
  106. package/dist/cli/commands/clean.js +0 -108
  107. package/dist/cli/commands/clean.js.map +0 -1
  108. package/dist/lib/clients/hooks.js +0 -191
  109. package/dist/lib/clients/hooks.js.map +0 -1
  110. package/dist/lib/exec/exec-engines.js +0 -63
  111. package/dist/lib/exec/exec-engines.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"validate-plan.js","sourceRoot":"","sources":["../../src/tools/validate-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,6BAA6B,CAAC;AACnE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,aAAa,eAAe;IAC3C,WAAW,EACT,wFAAwF;QACxF,6FAA6F;QAC7F,iGAAiG;QACjG,0FAA0F;QAC1F,iCAAiC,KAAK,CAAC,aAAa,gBAAgB;IACtE,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,MAAM,EAAE;gBACN,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC;gBAClB,WAAW,EAAE,oCAAoC,WAAW,GAAG;aAChE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IACxC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1D,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,EAAE,EAAE,IAAI;QACR,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"validate-plan.js","sourceRoot":"","sources":["../../src/tools/validate-plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGrC,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,uCAAuC,CAAC;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,UAAU,GAAG,CAAC;KACjB,MAAM,CAAC;IACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;CAC3B,CAAC;KACD,MAAM,EAAE,CAAC;AAEZ,MAAM,CAAC,MAAM,UAAU,GAAS;IAC9B,IAAI,EAAE,GAAG,KAAK,CAAC,aAAa,eAAe;IAC3C,WAAW,EACT,+FAA+F;QAC/F,mGAAmG;QACnG,mGAAmG;QACnG,oEAAoE,KAAK,CAAC,aAAa,gBAAgB;IACzG,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;SACF;QACD,QAAQ,EAAE,CAAC,SAAS,CAAC;QACrB,oBAAoB,EAAE,KAAK;KAC5B;CACF,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAa,EAAE,IAAiB;IAC5D,MAAM,MAAM,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,WAAW,CAAC,uBAAuB,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,OAAO,WAAW,CAAC,2BAA2B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IAClD,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,WAAW,CAAC,MAAM,CAAC,KAAK,IAAI,0BAA0B,CAAC,CAAC;IACjE,CAAC;IAED,OAAO,UAAU,CAAC;QAChB,EAAE,EAAE,IAAI;QACR,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC,CAAC;AACL,CAAC"}
package/dist/tui/app.js CHANGED
@@ -4,11 +4,11 @@ import { Box, Text, Static, useInput, useStdout } from 'ink';
4
4
  import { renderMatrixLogo } from '../matrix-logo.js';
5
5
  import { tlog } from './debug.js';
6
6
  import { theme } from './theme.js';
7
- import { Header, Sidebar, MessageView, LiveMessage, StatusLine, InputBox } from './components.js';
7
+ import { Footer, MessageView, LiveMessage, StatusLine, InputBox, Toasts, ErrorBlock, DiffSummary, } from './components.js';
8
8
  import { InfoPanel, CommandRunner, PermissionModal } from './palette.js';
9
9
  import { buildPalette } from './palette-source.js';
10
- import { applyEvent, pushUserMessage, syncMessages, emptyChat } from './state.js';
11
- import { subscribeEvents } from './opencode.js';
10
+ import { applyEvent, messageUsage, pendingQuestion, questionOptions, pushUserMessage, syncMessages, reconcilePendingPermissions, emptyChat, } from './state.js';
11
+ import { listPrimaryAgents, subscribeEvents, fetchPendingPermissions, } from './opencode.js';
12
12
  function useTerminalSize() {
13
13
  const { stdout } = useStdout();
14
14
  const [size, setSize] = useState({ rows: stdout?.rows ?? 24, columns: stdout?.columns ?? 80 });
@@ -27,12 +27,16 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
27
27
  const { rows, columns } = useTerminalSize();
28
28
  const [chat, setChat] = useState(emptyChat);
29
29
  const [overlay, setOverlay] = useState({ kind: 'none' });
30
- const [sessions, setSessions] = useState([]);
30
+ const [draft, setDraft] = useState('');
31
+ const [showReasoning, setShowReasoning] = useState(false);
32
+ const [modes, setModes] = useState(['build', 'plan']);
33
+ const [mode, setMode] = useState('build');
31
34
  const [ready, setReady] = useState(false);
32
35
  const [frame, setFrame] = useState(0);
33
36
  const sessionId = useRef('');
34
37
  const abortRef = useRef(new AbortController());
35
38
  const busyStartedAt = useRef(0);
39
+ const tuiCommandRef = useRef(() => { });
36
40
  const [splash, setSplash] = useState(splashMs > 0);
37
41
  useEffect(() => {
38
42
  if (splashMs <= 0)
@@ -52,14 +56,15 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
52
56
  if (!id)
53
57
  return;
54
58
  try {
55
- const [st, msgs] = await Promise.all([
59
+ const [st, msgs, perms] = await Promise.all([
56
60
  handle.client.session.status(),
57
61
  handle.client.session.messages({ path: { id } }),
62
+ fetchPendingPermissions(handle.url),
58
63
  ]);
59
64
  const status = st.data?.[id]?.type;
60
65
  const busy = status === 'busy' || status === 'retry';
61
66
  const raw = (msgs.data ?? []);
62
- setChat((prev) => syncMessages(prev, raw, busy));
67
+ setChat((prev) => reconcilePendingPermissions(syncMessages(prev, raw, busy), perms));
63
68
  }
64
69
  catch (err) {
65
70
  tlog('resync falhou', err.message);
@@ -74,8 +79,9 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
74
79
  try {
75
80
  const created = await handle.client.session.create({ body: { title: cwd.split('/').pop() ?? 'nio' } });
76
81
  sessionId.current = created.data?.id ?? '';
77
- const list = await handle.client.session.list();
78
- setSessions((list.data ?? []).slice(0, 20).map((s) => ({ id: s.id, title: s.title ?? '' })));
82
+ const agents = await listPrimaryAgents(handle.client);
83
+ setModes(agents);
84
+ setMode((cur) => (agents.includes(cur) ? cur : agents[0] ?? 'build'));
79
85
  }
80
86
  catch (err) {
81
87
  tlog('falha ao criar sessão', err.message);
@@ -88,8 +94,20 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
88
94
  void resync();
89
95
  continue;
90
96
  }
91
- if (evt.type === 'message.part.delta')
97
+ const et = evt.type;
98
+ if (et === 'message.part.delta')
92
99
  continue;
100
+ if (et === 'tui.prompt.append') {
101
+ const text = evt.properties?.text ?? '';
102
+ if (text)
103
+ setDraft((d) => (d ? `${d} ${text}` : text));
104
+ continue;
105
+ }
106
+ if (et === 'tui.command.execute') {
107
+ const cmd = evt.properties?.command ?? '';
108
+ tuiCommandRef.current(cmd);
109
+ continue;
110
+ }
93
111
  setChat((prev) => applyEvent(prev, evt));
94
112
  }
95
113
  })();
@@ -104,34 +122,87 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
104
122
  const t = setInterval(resync, 4000);
105
123
  return () => clearInterval(t);
106
124
  }, [chat.busy, resync]);
107
- useInput((_i, key) => {
125
+ useEffect(() => {
126
+ if (chat.toasts.length === 0)
127
+ return;
128
+ const iv = setInterval(() => {
129
+ setChat((prev) => {
130
+ const now = Date.now();
131
+ const kept = prev.toasts.filter((x) => x.until > now);
132
+ return kept.length === prev.toasts.length ? prev : { ...prev, toasts: kept };
133
+ });
134
+ }, 700);
135
+ return () => clearInterval(iv);
136
+ }, [chat.toasts.length]);
137
+ useInput((input, key) => {
138
+ if (key.ctrl && input === 'r')
139
+ return setShowReasoning((v) => !v);
108
140
  if (key.escape && chat.busy && sessionId.current) {
109
141
  handle.client.session.abort({ path: { id: sessionId.current } }).catch(() => { });
110
142
  setChat((prev) => ({ ...prev, busy: false }));
111
143
  }
112
- });
144
+ }, { isActive: overlay.kind === 'none' && chat.permissions.length === 0 });
113
145
  useEffect(() => () => handle.close(), [handle]);
114
146
  const send = (text) => {
115
147
  if (!sessionId.current)
116
148
  return;
149
+ setDraft('');
117
150
  setChat((prev) => pushUserMessage(prev, text));
118
151
  handle.client.session
119
- .prompt({ path: { id: sessionId.current }, body: { model, parts: [{ type: 'text', text }] } })
152
+ .prompt({ path: { id: sessionId.current }, body: { model, agent: mode, parts: [{ type: 'text', text }] } })
120
153
  .catch((err) => tlog('prompt falhou', err.message));
121
154
  };
155
+ const cycleMode = (reverse) => {
156
+ setMode((cur) => {
157
+ const n = modes.length;
158
+ if (n === 0)
159
+ return cur;
160
+ const i = Math.max(0, modes.indexOf(cur));
161
+ return modes[(i + (reverse ? -1 : 1) + n) % n] ?? cur;
162
+ });
163
+ };
164
+ const toast = (message, variant = 'info') => setChat((prev) => ({
165
+ ...prev,
166
+ toasts: [
167
+ ...prev.toasts.slice(-4),
168
+ { id: `toast-${Date.now()}`, message, variant, until: Date.now() + 3000 },
169
+ ],
170
+ }));
171
+ tuiCommandRef.current = (cmd) => {
172
+ switch (cmd) {
173
+ case 'prompt.clear':
174
+ return setDraft('');
175
+ case 'prompt.submit':
176
+ return send(draft);
177
+ case 'agent.cycle':
178
+ return cycleMode(false);
179
+ case 'session.interrupt':
180
+ if (sessionId.current)
181
+ handle.client.session.abort({ path: { id: sessionId.current } }).catch(() => { });
182
+ return setChat((prev) => ({ ...prev, busy: false }));
183
+ case 'session.compact':
184
+ if (sessionId.current)
185
+ handle.client.session.summarize({ path: { id: sessionId.current } }).catch(() => { });
186
+ return toast('compactando o contexto…');
187
+ default:
188
+ return toast(`comando do motor ignorado: ${cmd}`);
189
+ }
190
+ };
122
191
  const palette = useMemo(() => buildPalette(program), [program]);
123
192
  const onDispatch = (item, action) => {
193
+ setDraft('');
124
194
  if (action === 'prompt' && item.kind === 'capability')
125
195
  return send(item.prompt);
126
196
  if (action === 'run' && item.kind === 'command')
127
197
  return setOverlay({ kind: 'run', item });
128
198
  setOverlay({ kind: 'info', item });
129
199
  };
200
+ const closeOverlay = () => setOverlay({ kind: 'none' });
130
201
  const respondPermission = (r) => {
131
- const perm = chat.permission;
202
+ const perm = chat.permissions[0];
132
203
  if (!perm)
133
204
  return;
134
- setChat((prev) => ({ ...prev, permission: null }));
205
+ setChat((prev) => ({ ...prev, permissions: prev.permissions.slice(1) }));
135
206
  handle.client
136
207
  .postSessionIdPermissionsPermissionId({ path: { id: perm.sessionId, permissionID: perm.id }, body: { response: r } })
137
208
  .catch((err) => tlog('permission respond falhou', err.message))
@@ -148,10 +219,12 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
148
219
  };
149
220
  }, [chat.messages, chat.busy]);
150
221
  const phase = useMemo(() => {
222
+ if (chat.retry)
223
+ return `tentando de novo (${chat.retry.attempt})`;
151
224
  const parts = live?.parts ?? [];
152
225
  const tool = parts.find((p) => p.kind === 'tool' && (p.tool?.status === 'running' || p.tool?.status === 'pending'));
153
226
  if (tool)
154
- return `executando ${tool.text}`;
227
+ return `executando ${tool.tool?.name ?? tool.text}`;
155
228
  const hasText = parts.some((p) => p.kind === 'text' && p.text.trim());
156
229
  const hasReasoning = parts.some((p) => p.kind === 'reasoning' && p.text.trim());
157
230
  if (hasText)
@@ -159,13 +232,24 @@ export function App({ handle, program, cwd, session, splashMs = 1200, model }) {
159
232
  if (hasReasoning)
160
233
  return 'raciocinando';
161
234
  return 'pensando';
162
- }, [live]);
235
+ }, [live, chat.retry]);
163
236
  const elapsed = chat.busy ? Math.max(0, Math.floor((Date.now() - busyStartedAt.current) / 1000)) : 0;
237
+ const question = useMemo(() => pendingQuestion(chat), [chat]);
238
+ const options = useMemo(() => questionOptions(chat), [chat]);
164
239
  if (splash) {
165
240
  return (_jsxs(Box, { flexDirection: "column", alignItems: "center", paddingY: 1, children: [_jsx(Text, { children: renderMatrixLogo({ width: Math.min(70, columns), height: 16 }) }), _jsx(Text, { color: theme.accent, children: "operador NIO \u00B7 opencode/big-pickle" })] }));
166
241
  }
167
- const liveMax = Math.max(4, Math.floor(rows * 0.4));
168
242
  const disabled = chat.busy || !ready;
169
- return (_jsxs(Box, { flexDirection: "column", width: columns, children: [_jsx(Static, { items: finished, children: (m) => _jsx(MessageView, { message: m }, m.id) }), _jsxs(Box, { flexDirection: "row", children: [_jsx(Sidebar, { session: session, sessions: sessions }), _jsxs(Box, { flexDirection: "column", flexGrow: 1, minWidth: 0, children: [_jsx(Header, { url: handle.url }), live && _jsx(LiveMessage, { message: live, maxLines: liveMax }), _jsx(StatusLine, { busy: chat.busy, frame: frame, seconds: elapsed, label: phase }), chat.permission ? (_jsx(PermissionModal, { title: chat.permission.title, onRespond: respondPermission })) : overlay.kind === 'info' ? (_jsx(InfoPanel, { item: overlay.item, onClose: () => setOverlay({ kind: 'none' }) })) : overlay.kind === 'run' ? (_jsx(CommandRunner, { item: overlay.item, cwd: cwd, onClose: () => setOverlay({ kind: 'none' }) })) : (_jsx(InputBox, { disabled: disabled, palette: palette, onSubmit: send, onDispatch: onDispatch }))] })] })] }));
243
+ const pendingPerm = chat.permissions[0] ?? null;
244
+ const overlayUp = overlay.kind !== 'none' || !!pendingPerm;
245
+ const paletteOpen = draft.startsWith('/') && !overlayUp;
246
+ const paletteMaxItems = Math.max(3, Math.min(6, rows - 16));
247
+ const liveMax = Math.max(3, Math.floor(rows * 0.45) - (paletteOpen ? paletteMaxItems + 3 : 0));
248
+ const inputActive = !overlayUp;
249
+ const sessionTokens = chat.messages.reduce((n, m) => {
250
+ const u = messageUsage(m);
251
+ return n + (u ? u.tokensIn + u.tokensOut : 0);
252
+ }, 0);
253
+ return (_jsxs(Box, { flexDirection: "column", width: columns, children: [_jsx(Static, { items: finished, children: (m) => _jsx(MessageView, { message: m }, m.id) }), live && (_jsx(LiveMessage, { message: live, maxLines: liveMax, todos: chat.todos, files: chat.files, retry: chat.retry, expandReasoning: showReasoning })), _jsx(DiffSummary, { changes: chat.diff }), _jsx(StatusLine, { busy: chat.busy, frame: frame, seconds: elapsed, label: phase }), chat.error && _jsx(ErrorBlock, { error: chat.error }), _jsx(Toasts, { toasts: chat.toasts }), question && !overlayUp && (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: theme.accentBright, wrap: "truncate-end", children: ['↳ o nio perguntou: ', _jsx(Text, { color: theme.text, children: question.length > columns - 24 ? question.slice(0, columns - 27) + '…' : question })] }) })), _jsx(InputBox, { value: draft, onChange: setDraft, disabled: disabled, active: inputActive, palette: palette, onSubmit: send, onDispatch: onDispatch, onCycleMode: cycleMode, options: overlayUp ? [] : options, width: Math.max(24, columns - 6), maxItems: paletteMaxItems }), pendingPerm ? (_jsx(PermissionModal, { req: pendingPerm, queued: chat.permissions.length, onRespond: respondPermission })) : overlay.kind === 'info' ? (_jsx(InfoPanel, { item: overlay.item, onClose: closeOverlay })) : overlay.kind === 'run' ? (_jsx(CommandRunner, { item: overlay.item, cwd: cwd, onClose: closeOverlay })) : null, _jsx(Footer, { model: "big-pickle", cwd: cwd, session: session, mode: mode, sessionTokens: sessionTokens })] }));
170
254
  }
171
255
  //# sourceMappingURL=app.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/tui/app.tsx"],"names":[],"mappings":"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"}
@@ -1,58 +1,138 @@
1
- import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs, jsx as _jsx } from "react/jsx-runtime";
2
2
  import React from 'react';
3
- import { Box, Text, useInput } from 'ink';
3
+ import { Box, Text } from 'ink';
4
4
  import { theme, sym } from './theme.js';
5
5
  import { Markdown } from './markdown.js';
6
+ import { PromptInput } from './prompt-input.js';
6
7
  import { filterPalette } from './palette-source.js';
7
- const stripControl = (s) => Array.from(s).filter((ch) => ch >= ' ' && ch !== '').join('');
8
- const splitOnEnter = (s) => s.split(/\r|\n/);
8
+ import { messageUsage, summarizeToolInput, } from './state.js';
9
9
  const KIND_LABEL = {
10
10
  command: 'cmd',
11
11
  capability: 'agente',
12
12
  help: 'ajuda',
13
13
  };
14
- export function Header({ url }) {
15
- return (_jsxs(Box, { justifyContent: "space-between", paddingX: 1, children: [_jsx(Text, { bold: true, color: theme.accentBright, children: '▞ N I O' }), _jsxs(Text, { color: theme.dim, children: ["opencode/big-pickle \u00B7 ", url.replace(/^https?:\/\//, '')] })] }));
14
+ const clip = (s, n) => (s.length > n ? s.slice(0, n - 1) + '…' : s);
15
+ const kfmt = (n) => (n >= 1000 ? `${(n / 1000).toFixed(1)}k` : String(n));
16
+ const TOAST_STYLE = {
17
+ info: { color: theme.dim, icon: sym.bullet },
18
+ success: { color: theme.accent, icon: sym.ok },
19
+ warning: { color: theme.warn, icon: sym.warn },
20
+ error: { color: theme.err, icon: sym.err },
21
+ };
22
+ export function DiffSummary({ changes, }) {
23
+ if (changes.length === 0)
24
+ return null;
25
+ const parts = changes.slice(0, 4).map((c) => {
26
+ const name = c.file.split('/').pop() || c.file;
27
+ const a = c.added ? `+${c.added}` : '';
28
+ const r = c.removed ? `−${c.removed}` : '';
29
+ return `${name} ${[a, r].filter(Boolean).join(' ')}`.trim();
30
+ });
31
+ const more = changes.length - parts.length;
32
+ return (_jsx(Box, { paddingX: 1, children: _jsxs(Text, { color: theme.accent, wrap: "truncate-end", children: ['✎ ', changes.length, " arquivo(s): ", _jsxs(Text, { color: theme.dim, children: [parts.join(' · '), more > 0 ? ` · +${more}` : ''] })] }) }));
33
+ }
34
+ export function QuestionPicker({ options, sel, }) {
35
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.accentBright, paddingX: 1, children: [options.map((o, i) => (_jsxs(Text, { inverse: i === sel, color: i === sel ? theme.accentBright : undefined, wrap: "truncate-end", children: [' ', i + 1, ". ", o] }, i))), _jsx(Text, { color: theme.dim, children: "\u2191\u2193 escolher \u00B7 \u21B5 responder \u00B7 ou digite a sua" })] }));
16
36
  }
17
- function Desc({ children }) {
18
- return _jsx(Text, { color: theme.accent, children: children });
37
+ export function ErrorBlock({ error, }) {
38
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.err, paddingX: 1, children: [_jsxs(Text, { color: theme.err, children: [sym.err, " ", error.name] }), _jsxs(Text, { wrap: "truncate-end", children: [' ', error.message] }), error.retryable && (_jsx(Text, { color: theme.dim, children: ' reenvie o prompt pra tentar de novo' }))] }));
39
+ }
40
+ export function Toasts({ toasts }) {
41
+ if (toasts.length === 0)
42
+ return null;
43
+ return (_jsx(Box, { flexDirection: "column", paddingX: 1, children: toasts.map((t) => {
44
+ const s = TOAST_STYLE[t.variant];
45
+ return (_jsxs(Text, { color: s.color, wrap: "truncate-end", children: [s.icon, " ", t.message] }, t.id));
46
+ }) }));
47
+ }
48
+ export function Footer({ model, cwd, session, mode, sessionTokens = 0, }) {
49
+ const folder = cwd.replace(/\/+$/, '').split('/').pop() || cwd;
50
+ const bits = [`⏵ ${model}`, folder];
51
+ if (session)
52
+ bits.push(`${session.name} · ${session.profile}`);
53
+ if (sessionTokens > 0)
54
+ bits.push(`${kfmt(sessionTokens)} tok`);
55
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsxs(Text, { wrap: "truncate-end", children: [_jsx(Text, { color: theme.dim, children: bits.join(' · ') }), mode ? _jsx(Text, { color: theme.accentBright, children: ` [${mode}]` }) : null] }), _jsxs(Text, { color: theme.dim, children: [_jsx(Text, { color: theme.accent, children: "/" }), " paleta", ' ', _jsx(Text, { color: theme.accent, children: "^R" }), " racioc\u00EDnio", ' ', _jsx(Text, { color: theme.accent, children: "Tab" }), " modo", ' ', _jsx(Text, { color: theme.accent, children: "Esc" }), " abortar", ' ', _jsx(Text, { color: theme.accent, children: "^C" }), " sair"] })] }));
56
+ }
57
+ function ToolBlock({ part }) {
58
+ const t = part.tool;
59
+ const running = t?.status === 'running' || t?.status === 'pending';
60
+ const badge = running ? theme.warn : t?.status === 'error' ? theme.err : theme.dim;
61
+ const arg = clip(summarizeToolInput(t?.input), 48);
62
+ const outLine = (t?.output ?? '').split('\n').find((l) => l.trim()) ?? '';
63
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { wrap: "truncate-end", children: [_jsxs(Text, { color: theme.accent, children: [sym.dot, " "] }), _jsx(Text, { color: theme.text, children: t?.name ?? part.text }), arg ? _jsxs(Text, { color: theme.dim, children: ["(", arg, ")"] }) : null, ' ', _jsx(Text, { color: badge, children: t?.status ?? '' })] }), outLine && !running && (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ⎿ ', clip(outLine, 66)] }))] }));
64
+ }
65
+ const TODO_MARK = {
66
+ completed: '☑',
67
+ in_progress: '◐',
68
+ cancelled: '⊘',
69
+ pending: '☐',
70
+ };
71
+ function TodoList({ todos }) {
72
+ if (todos.length === 0)
73
+ return null;
74
+ return (_jsx(Box, { flexDirection: "column", children: todos.slice(0, 8).map((t, i) => (_jsxs(Text, { wrap: "truncate-end", color: t.status === 'completed'
75
+ ? theme.dim
76
+ : t.status === 'in_progress'
77
+ ? theme.warn
78
+ : t.status === 'cancelled'
79
+ ? theme.dim
80
+ : theme.text, children: [' ', TODO_MARK[t.status] ?? '☐', " ", t.content] }, i))) }));
19
81
  }
20
- export const Sidebar = React.memo(function Sidebar({ session, sessions, }) {
21
- return (_jsxs(Box, { flexDirection: "column", width: 26, flexShrink: 0, borderStyle: "round", borderColor: theme.border, paddingX: 1, children: [_jsx(Text, { bold: true, children: "Sess\u00E3o" }), session ? (_jsxs(_Fragment, { children: [_jsx(Text, { wrap: "truncate-end", children: session.name }), _jsxs(Desc, { children: [session.profile, " \u00B7 ", session.id.slice(0, 8)] })] })) : (_jsx(Desc, { children: "nenhuma vinculada" })), sessions.length > 1 && (_jsxs(_Fragment, { children: [_jsx(Box, { marginTop: 1, children: _jsx(Text, { bold: true, children: "Outras sess\u00F5es" }) }), sessions.slice(0, 3).map((s) => (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [sym.bullet, " ", s.title || s.id.slice(0, 8)] }, s.id)))] })), _jsx(Box, { marginTop: 1, children: _jsx(Text, { bold: true, children: "Atalhos" }) }), _jsxs(Text, { children: [_jsx(Text, { color: theme.accentBright, children: "/" }), " ", _jsx(Desc, { children: "paleta" })] }), _jsxs(Text, { children: [_jsx(Text, { color: theme.accentBright, children: "Esc" }), " ", _jsx(Desc, { children: "abortar" })] }), _jsxs(Text, { children: [_jsx(Text, { color: theme.accentBright, children: "^C" }), " ", _jsx(Desc, { children: "sair" })] })] }));
22
- });
23
- function ToolLine({ part }) {
24
- const running = part.tool?.status === 'running' || part.tool?.status === 'pending';
25
- const color = running ? theme.warn : part.tool?.status === 'error' ? theme.err : theme.dim;
26
- return (_jsxs(Text, { wrap: "truncate-end", children: [_jsxs(Text, { color: theme.accent, children: [sym.chevron, " "] }), _jsx(Text, { color: theme.text, children: part.text }), ' ', _jsx(Text, { color: color, children: part.tool?.status ?? '' })] }));
82
+ function UsageFooter({ usage, files = 0, }) {
83
+ const bits = [];
84
+ if (usage && (usage.tokensIn || usage.tokensOut))
85
+ bits.push(`↑${kfmt(usage.tokensIn)} ↓${kfmt(usage.tokensOut)}`);
86
+ if (usage && usage.cost > 0)
87
+ bits.push(`$${usage.cost.toFixed(3)}`);
88
+ if (files > 0)
89
+ bits.push(`${files} arquivo(s)`);
90
+ if (bits.length === 0)
91
+ return null;
92
+ return (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ', bits.join(' · ')] }));
27
93
  }
28
94
  function Author({ role }) {
29
- return (_jsx(Text, { bold: true, color: role === 'user' ? theme.user : theme.accentBright, children: role === 'user' ? `${sym.chevron} você` : `${sym.dot} nio` }));
95
+ return (_jsx(Text, { bold: true, color: role === 'user' ? theme.user : theme.accentBright, children: role === 'user' ? '> você' : '⏺ nio' }));
96
+ }
97
+ function ReasoningSummary({ text }) {
98
+ const lines = text.split('\n').map((l) => l.trim()).filter(Boolean);
99
+ if (lines.length === 0)
100
+ return null;
101
+ return (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: theme.dim, children: [' ✻ raciocínio', lines.length > 2 ? ` · ${lines.length} linhas` : ''] }), lines.slice(0, 2).map((l, i) => (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ', l] }, i)))] }));
30
102
  }
31
103
  function Part({ part }) {
104
+ if (part.kind === 'step')
105
+ return null;
32
106
  if (part.kind === 'tool')
33
- return _jsx(ToolLine, { part: part });
34
- if (part.kind === 'reasoning') {
35
- const t = part.text.replace(/\s+/g, ' ').trim();
36
- return t ? _jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ', sym.bullet, " ", t] }) : null;
37
- }
107
+ return _jsx(ToolBlock, { part: part });
108
+ if (part.kind === 'reasoning')
109
+ return _jsx(ReasoningSummary, { text: part.text });
38
110
  return part.text.trim() ? _jsx(Markdown, { text: part.text }) : null;
39
111
  }
40
112
  export function MessageView({ message }) {
41
- return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, paddingX: 1, children: [_jsx(Author, { role: message.role }), message.parts.map((p) => (_jsx(Part, { part: p }, p.id)))] }));
113
+ return (_jsxs(Box, { flexDirection: "column", marginBottom: 1, paddingX: 1, children: [_jsx(Author, { role: message.role }), message.parts.map((p) => (_jsx(Part, { part: p }, p.id))), message.role === 'assistant' && _jsx(UsageFooter, { usage: messageUsage(message) })] }));
42
114
  }
43
- export function LiveMessage({ message, maxLines, }) {
115
+ export function LiveMessage({ message, maxLines, todos = [], files = [], retry = null, expandReasoning = false, }) {
44
116
  const text = message.parts.filter((p) => p.kind === 'text').map((p) => p.text).join('');
45
- const reasoning = message.parts
117
+ const reasoningRaw = message.parts
46
118
  .filter((p) => p.kind === 'reasoning')
47
119
  .map((p) => p.text)
48
- .join(' ')
49
- .replace(/\s+/g, ' ')
120
+ .join('\n')
50
121
  .trim();
51
- const tools = message.parts.filter((p) => p.kind === 'tool');
122
+ const reasoningFlat = reasoningRaw.replace(/\s+/g, ' ');
123
+ const reasoningLines = reasoningRaw.split('\n').filter((l) => l.trim());
124
+ const allTools = message.parts.filter((p) => p.kind === 'tool');
125
+ const tools = allTools.slice(-4);
126
+ const toolsHidden = allTools.length - tools.length;
127
+ const reasoningShown = expandReasoning && reasoningLines.length
128
+ ? reasoningLines.slice(-Math.min(10, Math.max(3, maxLines - 6)))
129
+ : [];
130
+ const chrome = Math.min(6, todos.length) + tools.length * 2 + (retry ? 1 : 0) + reasoningShown.length + 2;
131
+ const textBudget = Math.max(2, maxLines - chrome);
52
132
  const lines = text.split('\n');
53
- const shown = lines.slice(-Math.max(2, maxLines));
133
+ const shown = lines.slice(-textBudget);
54
134
  const clipped = lines.length > shown.length;
55
- return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Author, { role: message.role }), reasoning && (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ', sym.bullet, " ", reasoning.slice(-160)] })), tools.map((t) => (_jsx(ToolLine, { part: t }, t.id))), clipped && _jsx(Text, { color: theme.dim, children: " \u2026 (rolagem acima)" }), shown.map((l, i) => (_jsx(Text, { wrap: "truncate-end", children: l || ' ' }, i)))] }));
135
+ return (_jsxs(Box, { flexDirection: "column", paddingX: 1, children: [_jsx(Author, { role: message.role }), retry && (_jsxs(Text, { color: theme.warn, wrap: "truncate-end", children: [' ↻ tentativa ', retry.attempt, ' — ', retry.note] })), _jsx(TodoList, { todos: todos }), toolsHidden > 0 && (_jsx(Text, { color: theme.dim, children: ` · +${toolsHidden} ferramenta(s) acima` })), tools.map((t) => (_jsx(ToolBlock, { part: t }, t.id))), reasoningRaw && !expandReasoning && (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ✻ raciocínio ', _jsx(Text, { color: theme.accent, children: "Ctrl-R" }), ' ', reasoningFlat.slice(-120)] })), reasoningRaw && expandReasoning && (_jsxs(Box, { flexDirection: "column", children: [_jsxs(Text, { color: theme.accent, children: [' ✻ raciocínio', reasoningLines.length > reasoningShown.length ? ` · ${reasoningLines.length} linhas` : ''] }), reasoningShown.map((l, i) => (_jsxs(Text, { color: theme.dim, wrap: "truncate-end", children: [' ', l] }, i)))] })), clipped && _jsx(Text, { color: theme.dim, children: " \u2026 (rolagem acima)" }), shown.map((l, i) => (_jsx(Text, { wrap: "truncate-end", children: l || ' ' }, i))), _jsx(UsageFooter, { usage: messageUsage(message), files: files.length })] }));
56
136
  }
57
137
  const FRAMES = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
58
138
  export function StatusLine({ busy, frame, seconds = 0, label = 'processando', }) {
@@ -62,76 +142,69 @@ export function StatusLine({ busy, frame, seconds = 0, label = 'processando', })
62
142
  }
63
143
  function SlashList({ items, sel }) {
64
144
  const cur = items[sel];
65
- return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [items.length === 0 && _jsx(Text, { color: theme.dim, children: "nenhum comando casa" }), items.map((it, n) => (_jsxs(Text, { inverse: n === sel, color: n === sel ? theme.accentBright : undefined, wrap: "truncate-end", children: [' ', _jsxs(Text, { color: theme.dim, children: ["[", KIND_LABEL[it.kind], "]"] }), " ", it.name, " ", _jsx(Text, { color: theme.dim, children: it.desc })] }, `${it.kind}:${it.name}`))), _jsxs(Text, { color: theme.dim, children: ["\u2191\u2193 \u00B7 Enter ", cur?.kind === 'capability' ? 'manda pro agente' : 'abre info', cur?.kind === 'command' ? ' · Ctrl-R roda' : '', " \u00B7 Esc sai"] })] }));
145
+ return (_jsxs(Box, { flexDirection: "column", borderStyle: "round", borderColor: theme.accent, paddingX: 1, children: [items.length === 0 && _jsx(Text, { color: theme.dim, children: "nenhum comando casa" }), items.map((it, n) => (_jsxs(Text, { inverse: n === sel, color: n === sel ? theme.accentBright : undefined, wrap: "truncate-end", children: [' ', _jsxs(Text, { color: theme.dim, children: ["[", KIND_LABEL[it.kind], "]"] }), " ", it.name, " ", _jsx(Text, { color: theme.dim, children: it.desc })] }, `${it.kind}:${it.name}`))), _jsxs(Text, { color: theme.dim, children: ["\u2191\u2193 \u00B7 Enter", ' ', cur?.kind === 'capability' ? 'manda pro agente' : cur?.kind === 'command' ? 'roda' : 'abre', " \u00B7 Esc sai"] })] }));
66
146
  }
67
- export function InputBox({ disabled, palette, onSubmit, onDispatch, defaultValue = '', }) {
68
- const valueRef = React.useRef(defaultValue);
69
- const [value, setValue] = React.useState(defaultValue);
147
+ export function defaultPaletteAction(kind) {
148
+ return kind === 'capability' ? 'prompt' : kind === 'command' ? 'run' : 'info';
149
+ }
150
+ export function InputBox({ value, onChange, disabled, active = true, palette, onSubmit, onDispatch, onCycleMode, options = [], width = 80, maxItems = 6, }) {
70
151
  const [sel, setSel] = React.useState(0);
71
- const set = (fn) => {
72
- valueRef.current = fn(valueRef.current);
73
- setValue(valueRef.current);
74
- };
152
+ const [optSel, setOptSel] = React.useState(0);
75
153
  const inPalette = value.startsWith('/');
76
- const matches = React.useMemo(() => (inPalette ? filterPalette(palette, value.slice(1)).slice(0, 8) : []), [inPalette, value, palette]);
154
+ const picking = active && options.length > 0 && value === '' && !inPalette;
155
+ const optSelC = Math.min(optSel, Math.max(0, options.length - 1));
156
+ const optsKey = options.join('|');
157
+ React.useEffect(() => {
158
+ setOptSel(0);
159
+ }, [optsKey]);
160
+ const matches = React.useMemo(() => (inPalette ? filterPalette(palette, value.slice(1)).slice(0, Math.max(1, maxItems)) : []), [inPalette, value, palette, maxItems]);
77
161
  const selC = Math.min(sel, Math.max(0, matches.length - 1));
78
- const submit = () => {
79
- if (disabled)
80
- return;
81
- const v = valueRef.current.trim();
82
- set(() => '');
83
- setSel(0);
84
- if (v)
85
- onSubmit(v);
86
- };
87
- const dispatch = (action) => {
88
- const it = matches[selC];
89
- if (!it)
90
- return;
91
- set(() => '');
162
+ const handleSubmit = (v) => {
163
+ const t = v.trim();
164
+ onChange('');
92
165
  setSel(0);
93
- onDispatch(it, action);
166
+ if (t)
167
+ onSubmit(t);
94
168
  };
95
- useInput((input, key) => {
96
- if (key.ctrl && input === 'r') {
97
- if (inPalette && matches[selC]?.kind === 'command')
98
- dispatch('run');
99
- return;
100
- }
101
- if (key.ctrl || key.meta || key.tab || key.leftArrow || key.rightArrow)
102
- return;
103
- if (key.escape) {
104
- if (inPalette) {
105
- set(() => '');
106
- setSel(0);
169
+ const handleNav = (dir) => {
170
+ if (picking) {
171
+ if (dir === 'up')
172
+ return setOptSel((n) => Math.max(0, n - 1));
173
+ if (dir === 'down')
174
+ return setOptSel((n) => Math.min(options.length - 1, n + 1));
175
+ if (dir === 'cancel')
176
+ return;
177
+ const chosen = options[optSelC];
178
+ if (chosen) {
179
+ setOptSel(0);
180
+ onSubmit(chosen);
107
181
  }
108
182
  return;
109
183
  }
110
- if (key.upArrow)
184
+ if (dir === 'up')
111
185
  return setSel((n) => Math.max(0, n - 1));
112
- if (key.downArrow) {
113
- if (inPalette)
114
- setSel((n) => Math.min(matches.length - 1, n + 1));
115
- return;
116
- }
117
- if (key.return) {
118
- if (inPalette)
119
- return dispatch(matches[selC]?.kind === 'capability' ? 'prompt' : 'info');
120
- return submit();
186
+ if (dir === 'down')
187
+ return setSel((n) => Math.min(matches.length - 1, n + 1));
188
+ if (dir === 'cancel') {
189
+ onChange('');
190
+ return setSel(0);
121
191
  }
122
- if (key.backspace || key.delete) {
123
- setSel(0);
124
- return set((v) => v.slice(0, -1));
125
- }
126
- const [head, ...rest] = splitOnEnter(input);
127
- const clean = stripControl(head ?? '');
128
- if (clean) {
192
+ const it = matches[selC];
193
+ if (!it)
194
+ return;
195
+ onChange('');
196
+ setSel(0);
197
+ onDispatch(it, defaultPaletteAction(it.kind));
198
+ };
199
+ const handleChange = (v) => {
200
+ onChange(v);
201
+ if (v.startsWith('/'))
129
202
  setSel(0);
130
- set((v) => v + clean);
131
- }
132
- if (rest.length > 0 && !inPalette)
133
- submit();
134
- }, { isActive: true });
135
- return (_jsxs(Box, { flexDirection: "column", children: [_jsx(Box, { borderStyle: "round", borderColor: disabled ? theme.dim : inPalette ? theme.accentBright : theme.accent, paddingX: 1, children: _jsxs(Text, { wrap: "truncate-start", children: [_jsxs(Text, { color: disabled ? theme.dim : theme.accent, children: [sym.chevron, " "] }), value, _jsx(Text, { color: theme.dim, children: "\u258C" }), disabled && !value && _jsx(Text, { color: theme.dim, children: "(pode digitar; envia quando a resposta terminar)" })] }) }), inPalette && _jsx(SlashList, { items: matches, sel: selC })] }));
203
+ };
204
+ return (_jsxs(Box, { flexDirection: "column", children: [picking && _jsx(QuestionPicker, { options: options, sel: optSelC }), _jsx(PromptInput, { value: value, onChange: handleChange, onSubmit: handleSubmit, navCapture: (inPalette || picking) && active, onNav: handleNav, onTab: onCycleMode, disabled: disabled, active: active, width: width, placeholder: disabled
205
+ ? '(pode digitar; envia quando a resposta terminar)'
206
+ : picking
207
+ ? '↑↓ pra escolher, ou digite'
208
+ : '', borderColor: disabled ? theme.dim : inPalette || picking ? theme.accentBright : theme.accent }), inPalette && active && _jsx(SlashList, { items: matches, sel: selC })] }));
136
209
  }
137
210
  //# sourceMappingURL=components.js.map