@pentoshi/clai 0.4.0 → 0.5.5

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 (45) hide show
  1. package/dist/agent/runner.js +38 -10
  2. package/dist/agent/runner.js.map +1 -1
  3. package/dist/commands/update.js +1 -1
  4. package/dist/index.js +9 -3
  5. package/dist/index.js.map +1 -1
  6. package/dist/llm/anthropic.js +69 -5
  7. package/dist/llm/anthropic.js.map +1 -1
  8. package/dist/llm/capabilities.d.ts +2 -0
  9. package/dist/llm/capabilities.js +55 -0
  10. package/dist/llm/capabilities.js.map +1 -0
  11. package/dist/llm/gemini.js +67 -13
  12. package/dist/llm/gemini.js.map +1 -1
  13. package/dist/llm/groq.js +4 -0
  14. package/dist/llm/groq.js.map +1 -1
  15. package/dist/llm/http.d.ts +6 -1
  16. package/dist/llm/http.js +92 -11
  17. package/dist/llm/http.js.map +1 -1
  18. package/dist/llm/nvidia.js +4 -0
  19. package/dist/llm/nvidia.js.map +1 -1
  20. package/dist/llm/openai.js +4 -0
  21. package/dist/llm/openai.js.map +1 -1
  22. package/dist/llm/openrouter.js +4 -0
  23. package/dist/llm/openrouter.js.map +1 -1
  24. package/dist/llm/provider.js +1 -1
  25. package/dist/llm/provider.js.map +1 -1
  26. package/dist/llm/router.js +1 -1
  27. package/dist/llm/router.js.map +1 -1
  28. package/dist/modes/ask.js +4 -0
  29. package/dist/modes/ask.js.map +1 -1
  30. package/dist/repl.js +161 -11
  31. package/dist/repl.js.map +1 -1
  32. package/dist/store/config.d.ts +3 -1
  33. package/dist/store/config.js +11 -2
  34. package/dist/store/config.js.map +1 -1
  35. package/dist/types.d.ts +6 -0
  36. package/dist/ui/markdown.d.ts +6 -0
  37. package/dist/ui/markdown.js +242 -0
  38. package/dist/ui/markdown.js.map +1 -0
  39. package/dist/ui/spinner.d.ts +6 -0
  40. package/dist/ui/spinner.js +78 -0
  41. package/dist/ui/spinner.js.map +1 -0
  42. package/dist/ui/thinking.d.ts +1 -1
  43. package/dist/ui/thinking.js +2 -1
  44. package/dist/ui/thinking.js.map +1 -1
  45. package/package.json +1 -1
@@ -0,0 +1,242 @@
1
+ import chalk from "chalk";
2
+ // Lightweight terminal markdown renderer that styles **bold**, *italic*,
3
+ // `code`, links, headings, lists, blockquotes, hrules, and ```fenced```
4
+ // code blocks. Designed to work both for one-shot strings and for
5
+ // token-streaming inputs (line-buffered).
6
+ const FENCE_OPEN = chalk.dim;
7
+ const FENCE_LINE = chalk.cyan;
8
+ function repeat(char, count) {
9
+ return char.repeat(Math.max(0, count));
10
+ }
11
+ function renderFenceHeader(lang, width = 60) {
12
+ const label = lang || "code";
13
+ const head = `─── ${label} `;
14
+ return FENCE_OPEN(head + repeat("─", Math.max(0, width - head.length)));
15
+ }
16
+ function renderFenceFooter(width = 60) {
17
+ return FENCE_OPEN(repeat("─", width));
18
+ }
19
+ // Walk inline markdown tokens and convert them to ANSI styles. Designed to
20
+ // handle one logical line at a time (so it can run after a newline arrives
21
+ // in the token stream).
22
+ export function renderInlineMarkdown(text) {
23
+ let out = "";
24
+ let i = 0;
25
+ while (i < text.length) {
26
+ // ``code`` (longer fences first to avoid eating the inner ticks)
27
+ if (text.startsWith("``", i)) {
28
+ const end = text.indexOf("``", i + 2);
29
+ if (end > i + 2) {
30
+ out += chalk.cyan(`\`${text.slice(i + 2, end)}\``);
31
+ i = end + 2;
32
+ continue;
33
+ }
34
+ }
35
+ // `code`
36
+ if (text[i] === "`") {
37
+ const end = text.indexOf("`", i + 1);
38
+ if (end > i + 1) {
39
+ out += chalk.cyan(text.slice(i + 1, end));
40
+ i = end + 1;
41
+ continue;
42
+ }
43
+ }
44
+ // ***bold-italic***
45
+ if (text.startsWith("***", i)) {
46
+ const end = text.indexOf("***", i + 3);
47
+ if (end > i + 3) {
48
+ out += chalk.bold.italic(renderInlineMarkdown(text.slice(i + 3, end)));
49
+ i = end + 3;
50
+ continue;
51
+ }
52
+ }
53
+ // **bold**
54
+ if (text.startsWith("**", i)) {
55
+ const end = text.indexOf("**", i + 2);
56
+ if (end > i + 2) {
57
+ out += chalk.bold(renderInlineMarkdown(text.slice(i + 2, end)));
58
+ i = end + 2;
59
+ continue;
60
+ }
61
+ }
62
+ // __bold__
63
+ if (text.startsWith("__", i)) {
64
+ const end = text.indexOf("__", i + 2);
65
+ if (end > i + 2) {
66
+ out += chalk.bold(renderInlineMarkdown(text.slice(i + 2, end)));
67
+ i = end + 2;
68
+ continue;
69
+ }
70
+ }
71
+ // *italic* — only when surrounded by non-word boundaries to avoid
72
+ // chewing through `*` characters in code or maths.
73
+ if (text[i] === "*" && text[i + 1] !== "*") {
74
+ const end = text.indexOf("*", i + 1);
75
+ if (end > i + 1 && text[end + 1] !== "*") {
76
+ const inner = text.slice(i + 1, end);
77
+ if (inner.length > 0 && !inner.startsWith(" ") && !inner.endsWith(" ")) {
78
+ out += chalk.italic(renderInlineMarkdown(inner));
79
+ i = end + 1;
80
+ continue;
81
+ }
82
+ }
83
+ }
84
+ // _italic_ (skip if it looks like part of a snake_case word)
85
+ if (text[i] === "_") {
86
+ const prev = text[i - 1];
87
+ const isWordBoundary = !prev || /[\s\W]/.test(prev);
88
+ if (isWordBoundary) {
89
+ const end = text.indexOf("_", i + 1);
90
+ if (end > i + 1) {
91
+ const after = text[end + 1];
92
+ const isAfterBoundary = !after || /[\s\W]/.test(after);
93
+ const inner = text.slice(i + 1, end);
94
+ if (isAfterBoundary &&
95
+ inner.length > 0 &&
96
+ !inner.startsWith(" ") &&
97
+ !inner.endsWith(" ")) {
98
+ out += chalk.italic(renderInlineMarkdown(inner));
99
+ i = end + 1;
100
+ continue;
101
+ }
102
+ }
103
+ }
104
+ }
105
+ // ~~strike~~
106
+ if (text.startsWith("~~", i)) {
107
+ const end = text.indexOf("~~", i + 2);
108
+ if (end > i + 2) {
109
+ out += chalk.strikethrough(renderInlineMarkdown(text.slice(i + 2, end)));
110
+ i = end + 2;
111
+ continue;
112
+ }
113
+ }
114
+ // [label](url)
115
+ if (text[i] === "[") {
116
+ const close = text.indexOf("]", i + 1);
117
+ if (close > i && text[close + 1] === "(") {
118
+ const urlEnd = text.indexOf(")", close + 2);
119
+ if (urlEnd > close + 2) {
120
+ const label = text.slice(i + 1, close);
121
+ const url = text.slice(close + 2, urlEnd);
122
+ out += chalk.cyan.underline(label) + chalk.dim(`(${url})`);
123
+ i = urlEnd + 1;
124
+ continue;
125
+ }
126
+ }
127
+ }
128
+ out += text[i];
129
+ i += 1;
130
+ }
131
+ return out;
132
+ }
133
+ function renderBlockLine(line, state) {
134
+ // Code fence open/close
135
+ const fenceMatch = line.match(/^(\s*)```(\w*)\s*(.*)$/);
136
+ if (fenceMatch) {
137
+ if (state.inFence) {
138
+ state.inFence = false;
139
+ state.fenceLang = "";
140
+ return renderFenceFooter();
141
+ }
142
+ state.inFence = true;
143
+ state.fenceLang = fenceMatch[2] ?? "";
144
+ return renderFenceHeader(state.fenceLang);
145
+ }
146
+ if (state.inFence) {
147
+ return FENCE_LINE(line);
148
+ }
149
+ // Headings
150
+ const heading = line.match(/^(#{1,6})\s+(.*)$/);
151
+ if (heading) {
152
+ const level = heading[1].length;
153
+ const body = heading[2].trim();
154
+ if (level <= 2)
155
+ return chalk.bold.magenta(renderInlineMarkdown(body));
156
+ if (level === 3)
157
+ return chalk.bold.cyan(renderInlineMarkdown(body));
158
+ return chalk.bold(renderInlineMarkdown(body));
159
+ }
160
+ // Horizontal rule
161
+ if (/^\s*[-*_]{3,}\s*$/.test(line)) {
162
+ return chalk.dim(repeat("─", 60));
163
+ }
164
+ // Markdown table separator: | --- | --- |
165
+ if (/^\s*\|?\s*:?-{3,}:?\s*(\|\s*:?-{3,}:?\s*)+\|?\s*$/.test(line)) {
166
+ return chalk.dim(repeat("─", Math.max(20, line.length)));
167
+ }
168
+ // Markdown table row: | cell | cell |
169
+ if (/^\s*\|.*\|\s*$/.test(line)) {
170
+ const cells = line
171
+ .replace(/^\s*\|/, "")
172
+ .replace(/\|\s*$/, "")
173
+ .split("|")
174
+ .map((cell) => renderInlineMarkdown(cell.trim()));
175
+ return chalk.dim("│ ") + cells.join(chalk.dim(" │ ")) + chalk.dim(" │");
176
+ }
177
+ // Blockquote
178
+ if (line.startsWith("> ")) {
179
+ return chalk.dim("│ ") + chalk.dim.italic(renderInlineMarkdown(line.slice(2)));
180
+ }
181
+ // GitHub-style task list: - [ ] todo / - [x] done
182
+ const task = line.match(/^(\s*)[-*+]\s+\[([ xX])\]\s+(.*)$/);
183
+ if (task) {
184
+ const checked = /[xX]/.test(task[2]);
185
+ const box = checked ? chalk.green("☑") : chalk.dim("☐");
186
+ const body = renderInlineMarkdown(task[3]);
187
+ return `${task[1]}${box} ${checked ? chalk.dim(body) : body}`;
188
+ }
189
+ // Ordered list
190
+ const ordered = line.match(/^(\s*)(\d+)\.\s+(.*)$/);
191
+ if (ordered) {
192
+ return `${ordered[1]}${chalk.cyan(`${ordered[2]}.`)} ${renderInlineMarkdown(ordered[3])}`;
193
+ }
194
+ // Unordered list
195
+ const unordered = line.match(/^(\s*)[-*+]\s+(.*)$/);
196
+ if (unordered) {
197
+ return `${unordered[1]}${chalk.cyan("•")} ${renderInlineMarkdown(unordered[2])}`;
198
+ }
199
+ return renderInlineMarkdown(line);
200
+ }
201
+ export function renderMarkdown(text) {
202
+ if (!text)
203
+ return text;
204
+ const state = { inFence: false, fenceLang: "" };
205
+ const lines = text.split("\n");
206
+ return lines.map((line) => renderBlockLine(line, state)).join("\n");
207
+ }
208
+ // Streaming variant: buffers tokens and emits ANSI-rendered output
209
+ // whenever a complete line arrives. Inside a fenced code block, lines
210
+ // are emitted as cyan text with header/footer borders.
211
+ export function createMarkdownStreamWriter(write) {
212
+ const state = { inFence: false, fenceLang: "" };
213
+ let buffer = "";
214
+ const emitLine = (line, withNewline) => {
215
+ write(renderBlockLine(line, state));
216
+ if (withNewline)
217
+ write("\n");
218
+ };
219
+ return {
220
+ push(token) {
221
+ buffer += token;
222
+ let newlineIndex = buffer.indexOf("\n");
223
+ while (newlineIndex !== -1) {
224
+ const line = buffer.slice(0, newlineIndex);
225
+ buffer = buffer.slice(newlineIndex + 1);
226
+ emitLine(line, true);
227
+ newlineIndex = buffer.indexOf("\n");
228
+ }
229
+ },
230
+ finish() {
231
+ if (buffer.length > 0) {
232
+ emitLine(buffer, false);
233
+ buffer = "";
234
+ }
235
+ if (state.inFence) {
236
+ // Emit a closing rule so unterminated fences still look tidy.
237
+ write("\n" + renderFenceFooter());
238
+ }
239
+ },
240
+ };
241
+ }
242
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../src/ui/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export interface ThinkingSpinner {
2
+ setLabel(label: string): void;
3
+ bumpReasoning(tokens: number): void;
4
+ stop(): void;
5
+ }
6
+ export declare function startThinkingSpinner(initialLabel?: string, signal?: AbortSignal): ThinkingSpinner;
@@ -0,0 +1,78 @@
1
+ import chalk from "chalk";
2
+ // Lightweight, dependency-free spinner used while we wait on the model
3
+ // (especially during long thinking phases when no visible tokens stream).
4
+ // Renders on a single line and clears itself on stop, so output below it
5
+ // stays clean.
6
+ const FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
7
+ const FRAME_INTERVAL_MS = 80;
8
+ export function startThinkingSpinner(initialLabel = "thinking", signal) {
9
+ if (!process.stdout.isTTY) {
10
+ // No-op for piped output so logs stay grep-friendly.
11
+ return {
12
+ setLabel: () => { },
13
+ bumpReasoning: () => { },
14
+ stop: () => { },
15
+ };
16
+ }
17
+ let label = initialLabel;
18
+ let reasoningTokens = 0;
19
+ let frame = 0;
20
+ const start = Date.now();
21
+ let stopped = false;
22
+ let lastWidth = 0;
23
+ const render = () => {
24
+ if (stopped)
25
+ return;
26
+ const elapsed = ((Date.now() - start) / 1000).toFixed(1);
27
+ const tokenSuffix = reasoningTokens > 0
28
+ ? chalk.dim(` · ${reasoningTokens.toLocaleString()} reasoning tokens`)
29
+ : "";
30
+ const line = chalk.magenta(FRAMES[frame % FRAMES.length]) +
31
+ " " +
32
+ chalk.dim(`${label} ${elapsed}s`) +
33
+ tokenSuffix;
34
+ process.stdout.write(`\r${line}`);
35
+ // Pad to clear leftover characters when the line shrinks.
36
+ const visibleLen = stripAnsi(line).length;
37
+ if (visibleLen < lastWidth) {
38
+ process.stdout.write(" ".repeat(lastWidth - visibleLen));
39
+ process.stdout.write(`\r${line}`);
40
+ }
41
+ lastWidth = visibleLen;
42
+ frame += 1;
43
+ };
44
+ render();
45
+ const timer = setInterval(render, FRAME_INTERVAL_MS);
46
+ // Don't keep the process alive just for the spinner.
47
+ if (typeof timer.unref === "function")
48
+ timer.unref();
49
+ const stop = () => {
50
+ if (stopped)
51
+ return;
52
+ stopped = true;
53
+ clearInterval(timer);
54
+ // Erase the spinner line entirely so subsequent output starts clean.
55
+ process.stdout.write(`\r${" ".repeat(Math.max(lastWidth, 1))}\r`);
56
+ };
57
+ // Stop the moment the user aborts so the spinner can never linger past
58
+ // an ESC, even if upstream cleanup paths are skipped by an exception.
59
+ if (signal) {
60
+ if (signal.aborted)
61
+ stop();
62
+ else
63
+ signal.addEventListener("abort", stop, { once: true });
64
+ }
65
+ return {
66
+ setLabel(next) {
67
+ label = next;
68
+ },
69
+ bumpReasoning(tokens) {
70
+ reasoningTokens += tokens;
71
+ },
72
+ stop,
73
+ };
74
+ }
75
+ function stripAnsi(text) {
76
+ return text.replace(/\x1b\[[0-9;]*m/g, "");
77
+ }
78
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/ui/spinner.ts"],"names":[],"mappings":"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"}
@@ -14,7 +14,7 @@ export declare function renderThinkingBlock(content?: string): string;
14
14
  export declare function renderThinkingHiddenNotice(): string;
15
15
  export declare function renderThinkingSummary(content: string): string;
16
16
  export declare function renderThinkingToggleMessage(): string;
17
- export declare function createThinkingStreamParser(onVisible: (text: string) => void): {
17
+ export declare function createThinkingStreamParser(onVisible: (text: string) => void, onReasoning?: (text: string) => void): {
18
18
  push(token: string): void;
19
19
  finish(): ThinkingResult;
20
20
  };
@@ -75,7 +75,7 @@ export function renderThinkingToggleMessage() {
75
75
  return chalk.dim(" thinking hidden");
76
76
  return chalk.dim(` thinking ${visible ? "will be shown" : "will be hidden"}`);
77
77
  }
78
- export function createThinkingStreamParser(onVisible) {
78
+ export function createThinkingStreamParser(onVisible, onReasoning) {
79
79
  let pending = "";
80
80
  let visible = "";
81
81
  let inThink = false;
@@ -91,6 +91,7 @@ export function createThinkingStreamParser(onVisible) {
91
91
  if (!text)
92
92
  return;
93
93
  thinkBuffer += text;
94
+ onReasoning?.(text);
94
95
  };
95
96
  const finishThinkingBlock = () => {
96
97
  if (thinkBuffer.trim())
@@ -1 +1 @@
1
- {"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/ui/thinking.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"thinking.js","sourceRoot":"","sources":["../../src/ui/thinking.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pentoshi/clai",
3
- "version": "0.4.0",
3
+ "version": "0.5.5",
4
4
  "description": "A fast, cross-platform AI CLI assistant with ask and agent modes for shell tasks, file operations, and cybersecurity workflows.",
5
5
  "type": "module",
6
6
  "license": "MIT",