@pentoshi/clai 0.7.2 → 0.8.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/README.md +3 -2
- package/dist/commands/providers.js +2 -0
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/llm/agentrouter.d.ts +2 -0
- package/dist/llm/agentrouter.js +65 -0
- package/dist/llm/agentrouter.js.map +1 -0
- package/dist/llm/capabilities.js +10 -4
- package/dist/llm/capabilities.js.map +1 -1
- package/dist/llm/groq.d.ts +1 -0
- package/dist/llm/groq.js +13 -2
- package/dist/llm/groq.js.map +1 -1
- package/dist/llm/http.d.ts +1 -1
- package/dist/llm/http.js +151 -35
- package/dist/llm/http.js.map +1 -1
- package/dist/llm/provider.d.ts +1 -0
- package/dist/llm/provider.js +26 -1
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/router.js +17 -9
- package/dist/llm/router.js.map +1 -1
- package/dist/repl.d.ts +1 -0
- package/dist/repl.js +93 -46
- package/dist/repl.js.map +1 -1
- package/dist/store/config.js +18 -5
- package/dist/store/config.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.js +1 -0
- package/dist/types.js.map +1 -1
- package/dist/ui/keys.js +2 -1
- package/dist/ui/keys.js.map +1 -1
- package/dist/ui/output-pane.d.ts +30 -2
- package/dist/ui/output-pane.js +314 -6
- package/dist/ui/output-pane.js.map +1 -1
- package/package.json +1 -1
package/dist/llm/provider.js
CHANGED
|
@@ -10,6 +10,9 @@ export const providerAliases = {
|
|
|
10
10
|
nvidia: "nvidia",
|
|
11
11
|
nim: "nvidia",
|
|
12
12
|
nvcf: "nvidia",
|
|
13
|
+
agentrouter: "agentrouter",
|
|
14
|
+
"agent-router": "agentrouter",
|
|
15
|
+
router: "agentrouter",
|
|
13
16
|
ollama: "ollama",
|
|
14
17
|
local: "ollama",
|
|
15
18
|
};
|
|
@@ -19,9 +22,25 @@ export const defaultModels = {
|
|
|
19
22
|
openrouter: "meta-llama/llama-3.3-70b-instruct:free",
|
|
20
23
|
openai: "gpt-4o-mini",
|
|
21
24
|
anthropic: "claude-3-5-haiku-latest",
|
|
22
|
-
nvidia: "
|
|
25
|
+
nvidia: "openai/gpt-oss-20b",
|
|
26
|
+
agentrouter: "gpt-5",
|
|
23
27
|
ollama: "llama3.1:8b",
|
|
24
28
|
};
|
|
29
|
+
const retiredModelReplacements = {
|
|
30
|
+
groq: {
|
|
31
|
+
"gemma2-9b-it": "llama-3.1-8b-instant",
|
|
32
|
+
"moonshotai/kimi-k2-instruct": "openai/gpt-oss-120b",
|
|
33
|
+
"deepseek-r1-distill-llama-70b": "llama-3.3-70b-versatile",
|
|
34
|
+
"llama3-70b-8192": "llama-3.3-70b-versatile",
|
|
35
|
+
"llama3-8b-8192": "llama-3.1-8b-instant",
|
|
36
|
+
"meta-llama/llama-4-maverick-17b-128e-instruct": "meta-llama/llama-4-scout-17b-16e-instruct",
|
|
37
|
+
},
|
|
38
|
+
nvidia: {
|
|
39
|
+
// Older default; redirect existing configs to the new openai/gpt-oss-20b
|
|
40
|
+
// default so retired Nemotron entries don't surface 404s.
|
|
41
|
+
"nvidia/llama-3.3-nemotron-super-49b-v1": defaultModels.nvidia,
|
|
42
|
+
},
|
|
43
|
+
};
|
|
25
44
|
export const envVars = {
|
|
26
45
|
groq: "GROQ_API_KEY",
|
|
27
46
|
gemini: "GEMINI_API_KEY",
|
|
@@ -29,6 +48,7 @@ export const envVars = {
|
|
|
29
48
|
openai: "OPENAI_API_KEY",
|
|
30
49
|
anthropic: "ANTHROPIC_API_KEY",
|
|
31
50
|
nvidia: "NVIDIA_API_KEY",
|
|
51
|
+
agentrouter: "AGENTROUTER_API_KEY",
|
|
32
52
|
ollama: "OLLAMA_HOST",
|
|
33
53
|
};
|
|
34
54
|
export function normalizeProvider(value) {
|
|
@@ -44,6 +64,11 @@ export function assertProvider(value) {
|
|
|
44
64
|
export function getDefaultModel(provider) {
|
|
45
65
|
return defaultModels[provider];
|
|
46
66
|
}
|
|
67
|
+
export function sanitizeProviderModel(provider, model) {
|
|
68
|
+
const normalized = model.trim();
|
|
69
|
+
const replacement = retiredModelReplacements[provider]?.[normalized.toLowerCase()];
|
|
70
|
+
return replacement ?? normalized;
|
|
71
|
+
}
|
|
47
72
|
export function maskSecret(secret) {
|
|
48
73
|
if (secret.length <= 4) {
|
|
49
74
|
return "••••";
|
package/dist/llm/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAyB1C,MAAM,CAAC,MAAM,eAAe,GAA+B;IACzD,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,MAAM,EAAE,QAAQ;IAChB,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,QAAQ;IACb,IAAI,EAAE,QAAQ;IACd,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,QAAQ;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA+B;IACvD,IAAI,EAAE,yBAAyB;IAC/B,MAAM,EAAE,kBAAkB;IAC1B,UAAU,EAAE,wCAAwC;IACpD,MAAM,EAAE,aAAa;IACrB,SAAS,EAAE,yBAAyB;IACpC,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/llm/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/llm/router.js
CHANGED
|
@@ -5,6 +5,7 @@ import { geminiProvider } from "./gemini.js";
|
|
|
5
5
|
import { groqProvider } from "./groq.js";
|
|
6
6
|
import { ProviderError } from "./http.js";
|
|
7
7
|
import { nvidiaProvider } from "./nvidia.js";
|
|
8
|
+
import { agentrouterProvider } from "./agentrouter.js";
|
|
8
9
|
import { ollamaProvider } from "./ollama.js";
|
|
9
10
|
import { openaiProvider } from "./openai.js";
|
|
10
11
|
import { openrouterProvider } from "./openrouter.js";
|
|
@@ -57,6 +58,7 @@ export const providers = {
|
|
|
57
58
|
openai: openaiProvider,
|
|
58
59
|
anthropic: anthropicProvider,
|
|
59
60
|
nvidia: nvidiaProvider,
|
|
61
|
+
agentrouter: agentrouterProvider,
|
|
60
62
|
ollama: ollamaProvider,
|
|
61
63
|
};
|
|
62
64
|
const fallbackOrder = [
|
|
@@ -64,6 +66,7 @@ const fallbackOrder = [
|
|
|
64
66
|
"groq",
|
|
65
67
|
"gemini",
|
|
66
68
|
"openrouter",
|
|
69
|
+
"agentrouter",
|
|
67
70
|
"openai",
|
|
68
71
|
"anthropic",
|
|
69
72
|
"ollama",
|
|
@@ -114,6 +117,9 @@ export async function completeWithProvider(request) {
|
|
|
114
117
|
}
|
|
115
118
|
catch (error) {
|
|
116
119
|
failures.push(`${providerId}: ${summarizeProviderError(error)}`);
|
|
120
|
+
if (isRateLimited(error)) {
|
|
121
|
+
throw new Error(`No provider could complete the request.${formatFailures(failures)}`);
|
|
122
|
+
}
|
|
117
123
|
}
|
|
118
124
|
}
|
|
119
125
|
throw new Error(`No provider could complete the request.${formatFailures(failures)}`);
|
|
@@ -149,17 +155,19 @@ export async function streamWithProvider(request, onToken, onStatus) {
|
|
|
149
155
|
catch (error) {
|
|
150
156
|
if (request.signal?.aborted)
|
|
151
157
|
throw error;
|
|
152
|
-
if (isRateLimited(error)
|
|
158
|
+
if (isRateLimited(error)) {
|
|
153
159
|
const wait = retryWaitMs(error, attempt);
|
|
154
|
-
if (wait
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
break;
|
|
160
|
+
if (attempt < MAX_RETRIES && wait <= MAX_RETRY_WAIT_MS) {
|
|
161
|
+
emitStatus(`\n ⏳ ${providerId} rate limited, retrying in ${Math.ceil(wait / 1000)}s...\n`);
|
|
162
|
+
await sleep(wait, request.signal);
|
|
163
|
+
continue;
|
|
159
164
|
}
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
165
|
+
const suffix = wait > MAX_RETRY_WAIT_MS
|
|
166
|
+
? ` (~${Math.ceil(wait / 1000)}s)`
|
|
167
|
+
: "";
|
|
168
|
+
emitStatus(`\n ⏳ ${providerId} rate limited${suffix}; staying on selected provider.\n`);
|
|
169
|
+
failures.push(`${providerId}: ${summarizeProviderError(error)}`);
|
|
170
|
+
throw new Error(`No provider could stream the request.${formatFailures(failures)}`);
|
|
163
171
|
}
|
|
164
172
|
failures.push(`${providerId}: ${summarizeProviderError(error)}`);
|
|
165
173
|
break;
|
package/dist/llm/router.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/llm/router.ts"],"names":[],"mappings":"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"}
|
package/dist/repl.d.ts
CHANGED
|
@@ -10,5 +10,6 @@ export interface SlashCommand {
|
|
|
10
10
|
usage?: string;
|
|
11
11
|
description: string;
|
|
12
12
|
}
|
|
13
|
+
export declare function getKnownModels(provider: string): string[];
|
|
13
14
|
export declare function getSlashCommandSuggestions(line: string): SlashCommand[];
|
|
14
15
|
export declare function startRepl(options?: ReplOptions): Promise<void>;
|
package/dist/repl.js
CHANGED
|
@@ -14,7 +14,7 @@ import { clearThinking, createThinkingStreamParser, getLastThinking, rememberThi
|
|
|
14
14
|
import { createMarkdownStreamWriter, renderMarkdown } from "./ui/markdown.js";
|
|
15
15
|
import { startThinkingSpinner } from "./ui/spinner.js";
|
|
16
16
|
import { modelSupportsThinking } from "./llm/capabilities.js";
|
|
17
|
-
import { getLastViewport, getViewport, listViewports, toggleViewport, } from "./ui/output-pane.js";
|
|
17
|
+
import { getLastViewport, getViewport, isPagerActive, listViewports, openViewportPager, toggleViewport, } from "./ui/output-pane.js";
|
|
18
18
|
import { compactMessages, estimateMessagesTokens, } from "./agent/context-manager.js";
|
|
19
19
|
import { isCtrlC, isCtrlO, isCtrlT, isEscape } from "./ui/keys.js";
|
|
20
20
|
const slashCommands = [
|
|
@@ -67,7 +67,7 @@ const slashCommands = [
|
|
|
67
67
|
{
|
|
68
68
|
command: "/output",
|
|
69
69
|
usage: "[last|<id>|list]",
|
|
70
|
-
description: "
|
|
70
|
+
description: "open full tool output (Ctrl+O); q closes the pager",
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
73
|
command: "/freeonly",
|
|
@@ -99,40 +99,40 @@ const slashCommands = [
|
|
|
99
99
|
// ── Well-known models per provider (refreshed May 2026) ───────────────────
|
|
100
100
|
const knownModels = {
|
|
101
101
|
groq: [
|
|
102
|
-
"llama-3.3-70b-versatile",
|
|
103
|
-
"llama-3.1-8b-instant",
|
|
104
|
-
"openai/gpt-oss-120b",
|
|
105
102
|
"openai/gpt-oss-20b",
|
|
106
|
-
"
|
|
107
|
-
"
|
|
103
|
+
"openai/gpt-oss-120b",
|
|
104
|
+
"openai/gpt-oss-safeguard-20b",
|
|
108
105
|
"qwen/qwen3-32b",
|
|
109
|
-
"
|
|
106
|
+
"llama-3.3-70b-versatile",
|
|
107
|
+
"llama-3.1-8b-instant",
|
|
110
108
|
"meta-llama/llama-4-scout-17b-16e-instruct",
|
|
111
|
-
"
|
|
109
|
+
"groq/compound-mini",
|
|
110
|
+
"groq/compound",
|
|
112
111
|
],
|
|
113
112
|
gemini: [
|
|
114
113
|
"gemini-3.5-flash",
|
|
115
|
-
"gemini-3.1-pro",
|
|
116
|
-
"gemini-3-flash",
|
|
114
|
+
"gemini-3.1-pro-preview",
|
|
115
|
+
"gemini-3-flash-preview",
|
|
117
116
|
"gemini-3.1-flash-lite",
|
|
117
|
+
"gemini-3-pro-preview",
|
|
118
118
|
"gemini-2.5-pro",
|
|
119
119
|
"gemini-2.5-flash",
|
|
120
120
|
"gemini-2.5-flash-lite",
|
|
121
121
|
"gemini-2.0-flash",
|
|
122
122
|
"gemini-2.0-flash-lite",
|
|
123
|
-
"gemini-1.5-pro",
|
|
124
123
|
],
|
|
125
124
|
openrouter: [
|
|
126
125
|
"meta-llama/llama-3.3-70b-instruct:free",
|
|
127
|
-
"
|
|
128
|
-
"
|
|
129
|
-
"
|
|
130
|
-
"
|
|
131
|
-
"
|
|
126
|
+
"deepseek/deepseek-v4-flash:free",
|
|
127
|
+
"openai/gpt-oss-20b:free",
|
|
128
|
+
"qwen/qwen3-coder:free",
|
|
129
|
+
"qwen/qwen3-next-80b-a3b-instruct:free",
|
|
130
|
+
"google/gemma-4-31b-it:free",
|
|
131
|
+
"nvidia/nemotron-3-nano-30b-a3b:free",
|
|
132
|
+
"z-ai/glm-4.5-air:free",
|
|
133
|
+
"moonshotai/kimi-k2.6",
|
|
134
|
+
"meta-llama/llama-4-maverick",
|
|
132
135
|
"google/gemini-2.5-flash",
|
|
133
|
-
"anthropic/claude-sonnet-4-6",
|
|
134
|
-
"openai/gpt-4o-mini",
|
|
135
|
-
"mistralai/mistral-7b-instruct:free",
|
|
136
136
|
],
|
|
137
137
|
openai: [
|
|
138
138
|
"gpt-5.5",
|
|
@@ -158,26 +158,30 @@ const knownModels = {
|
|
|
158
158
|
"claude-3-5-haiku-latest",
|
|
159
159
|
],
|
|
160
160
|
nvidia: [
|
|
161
|
-
"
|
|
162
|
-
"
|
|
163
|
-
"meta/llama-3.1-70b-instruct",
|
|
164
|
-
"nvidia/llama-3.3-nemotron-super-49b-v1",
|
|
165
|
-
"nvidia/llama-3.1-nemotron-70b-instruct",
|
|
166
|
-
"deepseek-ai/deepseek-v4-pro",
|
|
167
|
-
"deepseek-ai/deepseek-v4-flash",
|
|
168
|
-
"deepseek-ai/deepseek-v3.1-terminus",
|
|
169
|
-
"deepseek-ai/deepseek-r1",
|
|
161
|
+
"openai/gpt-oss-20b",
|
|
162
|
+
"openai/gpt-oss-120b",
|
|
170
163
|
"moonshotai/kimi-k2.6",
|
|
171
|
-
"
|
|
164
|
+
"deepseek-ai/deepseek-v4-flash",
|
|
165
|
+
"deepseek-ai/deepseek-v4-pro",
|
|
172
166
|
"z-ai/glm-5.1",
|
|
173
|
-
"z-ai/glm-5",
|
|
174
167
|
"minimaxai/minimax-m2.7",
|
|
175
|
-
"
|
|
176
|
-
"
|
|
177
|
-
"
|
|
178
|
-
"
|
|
179
|
-
"
|
|
180
|
-
"
|
|
168
|
+
"google/gemma-4-31b-it",
|
|
169
|
+
"nvidia/nemotron-3-nano-30b-a3b",
|
|
170
|
+
"nvidia/nemotron-3-super-120b-a12b",
|
|
171
|
+
"nvidia/llama-3.3-nemotron-super-49b-v1",
|
|
172
|
+
"nvidia/llama-3.3-nemotron-super-49b-v1.5",
|
|
173
|
+
"meta/llama-3.3-70b-instruct",
|
|
174
|
+
"meta/llama-4-maverick-17b-128e-instruct",
|
|
175
|
+
"meta/llama-3.1-70b-instruct",
|
|
176
|
+
"nvidia/llama-3.1-nemotron-70b-instruct",
|
|
177
|
+
"qwen/qwen3-next-80b-a3b-instruct",
|
|
178
|
+
"qwen/qwen3.5-122b-a10b",
|
|
179
|
+
"mistralai/mistral-small-4-119b-2603",
|
|
180
|
+
"mistralai/mistral-medium-3.5-128b",
|
|
181
|
+
"mistralai/mistral-large-3-675b-instruct-2512",
|
|
182
|
+
"mistralai/mistral-nemotron",
|
|
183
|
+
"stepfun-ai/step-3.5-flash",
|
|
184
|
+
"sarvamai/sarvam-m",
|
|
181
185
|
],
|
|
182
186
|
ollama: [
|
|
183
187
|
"llama3.3:70b",
|
|
@@ -191,7 +195,23 @@ const knownModels = {
|
|
|
191
195
|
"phi4:14b",
|
|
192
196
|
"codellama:7b",
|
|
193
197
|
],
|
|
198
|
+
agentrouter: [
|
|
199
|
+
"gpt-5",
|
|
200
|
+
"gpt-5-mini",
|
|
201
|
+
"claude-opus-4-6",
|
|
202
|
+
"claude-haiku-4-5-20251001",
|
|
203
|
+
"deepseek-v4-flash",
|
|
204
|
+
"deepseek-v4-pro",
|
|
205
|
+
"deepseek-v3.1",
|
|
206
|
+
"deepseek-v3.2",
|
|
207
|
+
"glm-4.6",
|
|
208
|
+
"glm-5.1",
|
|
209
|
+
"glm4.5",
|
|
210
|
+
],
|
|
194
211
|
};
|
|
212
|
+
export function getKnownModels(provider) {
|
|
213
|
+
return [...(knownModels[provider] ?? [])];
|
|
214
|
+
}
|
|
195
215
|
// ── Abort controller for streaming cancellation ─────────────────────────────
|
|
196
216
|
let currentAbortController = null;
|
|
197
217
|
class AbortRunError extends Error {
|
|
@@ -339,6 +359,10 @@ async function readPromptLine(options) {
|
|
|
339
359
|
resolve(submittedLine);
|
|
340
360
|
};
|
|
341
361
|
function handleKeypress(sequence, key) {
|
|
362
|
+
// The alt-screen pager owns the terminal while open; ignore everything
|
|
363
|
+
// here so the user's navigation keys don't bleed into the input line.
|
|
364
|
+
if (isPagerActive())
|
|
365
|
+
return;
|
|
342
366
|
const menu = getMenuState();
|
|
343
367
|
// Cmd+C on macOS terminals is handled by the OS (it never reaches us),
|
|
344
368
|
// but some Linux terminals forward Meta+C. Treat that as a no-op so
|
|
@@ -590,7 +614,7 @@ function help() {
|
|
|
590
614
|
})
|
|
591
615
|
.join("\n");
|
|
592
616
|
return (lines +
|
|
593
|
-
chalk.dim("\n\n ESC abort │ Ctrl+C clears input (twice to exit) │ Ctrl+T toggle thinking │ Ctrl+O
|
|
617
|
+
chalk.dim("\n\n ESC abort │ Ctrl+C clears input (twice to exit) │ Ctrl+T toggle thinking │ Ctrl+O opens tool output pager (q to close)"));
|
|
594
618
|
}
|
|
595
619
|
async function pickModelInteractively(provider, currentModel) {
|
|
596
620
|
const models = knownModels[provider] ?? [];
|
|
@@ -1079,7 +1103,16 @@ async function handleSlash(line, state) {
|
|
|
1079
1103
|
console.log(chalk.dim(` no viewport: ${target}`));
|
|
1080
1104
|
return true;
|
|
1081
1105
|
}
|
|
1082
|
-
|
|
1106
|
+
// On a TTY, open the alternate-screen pager so users can scroll long
|
|
1107
|
+
// outputs and close with q / Ctrl+O. In non-TTY contexts (piped or
|
|
1108
|
+
// CI), fall back to the inline toggle so the artifact still lands in
|
|
1109
|
+
// the captured stdout.
|
|
1110
|
+
if (process.stdout.isTTY) {
|
|
1111
|
+
await openViewportPager(viewport.id);
|
|
1112
|
+
}
|
|
1113
|
+
else {
|
|
1114
|
+
await toggleViewport(viewport.id);
|
|
1115
|
+
}
|
|
1083
1116
|
return true;
|
|
1084
1117
|
}
|
|
1085
1118
|
case "/think":
|
|
@@ -1122,6 +1155,7 @@ export async function startRepl(options = {}) {
|
|
|
1122
1155
|
const promptHistory = [];
|
|
1123
1156
|
let isReadingPrompt = false;
|
|
1124
1157
|
let outputShortcutBusy = false;
|
|
1158
|
+
let lastOutputShortcutAt = 0;
|
|
1125
1159
|
emitKeypressEvents(input);
|
|
1126
1160
|
// Survive stray promise rejections (eg AbortError from a cancelled
|
|
1127
1161
|
// SSE reader) without killing the REPL. Anything that ends up here
|
|
@@ -1151,23 +1185,36 @@ export async function startRepl(options = {}) {
|
|
|
1151
1185
|
const handleOutputShortcut = async () => {
|
|
1152
1186
|
if (outputShortcutBusy)
|
|
1153
1187
|
return;
|
|
1188
|
+
const now = Date.now();
|
|
1189
|
+
if (now - lastOutputShortcutAt < 400)
|
|
1190
|
+
return;
|
|
1191
|
+
lastOutputShortcutAt = now;
|
|
1154
1192
|
outputShortcutBusy = true;
|
|
1155
1193
|
try {
|
|
1156
1194
|
const v = getLastViewport();
|
|
1157
|
-
if (v) {
|
|
1158
|
-
if (currentAbortController)
|
|
1159
|
-
process.stdout.write("\n");
|
|
1160
|
-
await toggleViewport(v.id);
|
|
1161
|
-
}
|
|
1162
|
-
else {
|
|
1195
|
+
if (!v) {
|
|
1163
1196
|
process.stdout.write(chalk.dim("\n (no tool output to expand yet)\n"));
|
|
1197
|
+
return;
|
|
1164
1198
|
}
|
|
1199
|
+
// While a stream is in flight, opening the alt-screen pager would
|
|
1200
|
+
// collide with incoming tokens. Fall back to the inline toggle so the
|
|
1201
|
+
// user can still peek at the previous tool's output.
|
|
1202
|
+
if (currentAbortController) {
|
|
1203
|
+
process.stdout.write("\n");
|
|
1204
|
+
await toggleViewport(v.id);
|
|
1205
|
+
return;
|
|
1206
|
+
}
|
|
1207
|
+
// Idle path: open the full output in the alternate-screen pager.
|
|
1208
|
+
// Keys (q / ESC / Ctrl+O) inside the pager close it and return here.
|
|
1209
|
+
await openViewportPager(v.id);
|
|
1165
1210
|
}
|
|
1166
1211
|
finally {
|
|
1167
1212
|
outputShortcutBusy = false;
|
|
1168
1213
|
}
|
|
1169
1214
|
};
|
|
1170
1215
|
const handleKeypress = (_sequence, key) => {
|
|
1216
|
+
if (isPagerActive())
|
|
1217
|
+
return;
|
|
1171
1218
|
if (isCtrlT(key) && !isReadingPrompt)
|
|
1172
1219
|
handleThinkingShortcut();
|
|
1173
1220
|
if (isCtrlO(key) && !isReadingPrompt) {
|
|
@@ -1221,7 +1268,7 @@ export async function startRepl(options = {}) {
|
|
|
1221
1268
|
mode: state.mode,
|
|
1222
1269
|
}));
|
|
1223
1270
|
console.log(renderSuggestions());
|
|
1224
|
-
console.log(chalk.dim(" ESC abort │ Ctrl+C clears input │ Ctrl+T or /think for thinking │ Ctrl+O
|
|
1271
|
+
console.log(chalk.dim(" ESC abort │ Ctrl+C clears input │ Ctrl+T or /think for thinking │ Ctrl+O opens full tool output (q to close)\n"));
|
|
1225
1272
|
// Hint thinking-capable users that the toggle exists. We default it to
|
|
1226
1273
|
// off for speed, since on NIM many models route through a much slower
|
|
1227
1274
|
// chat-template path when reasoning is enabled.
|