@pentoshi/clai 0.3.1 → 0.5.1

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 (46) hide show
  1. package/README.md +5 -2
  2. package/dist/agent/runner.js +1 -0
  3. package/dist/agent/runner.js.map +1 -1
  4. package/dist/commands/providers.js +2 -0
  5. package/dist/commands/providers.js.map +1 -1
  6. package/dist/commands/update.js +1 -1
  7. package/dist/commands/update.js.map +1 -1
  8. package/dist/index.js +9 -3
  9. package/dist/index.js.map +1 -1
  10. package/dist/llm/anthropic.js +69 -5
  11. package/dist/llm/anthropic.js.map +1 -1
  12. package/dist/llm/capabilities.d.ts +2 -0
  13. package/dist/llm/capabilities.js +55 -0
  14. package/dist/llm/capabilities.js.map +1 -0
  15. package/dist/llm/gemini.js +67 -13
  16. package/dist/llm/gemini.js.map +1 -1
  17. package/dist/llm/groq.js +4 -0
  18. package/dist/llm/groq.js.map +1 -1
  19. package/dist/llm/http.d.ts +6 -1
  20. package/dist/llm/http.js +82 -11
  21. package/dist/llm/http.js.map +1 -1
  22. package/dist/llm/nvidia.d.ts +2 -0
  23. package/dist/llm/nvidia.js +56 -0
  24. package/dist/llm/nvidia.js.map +1 -0
  25. package/dist/llm/openai.js +4 -0
  26. package/dist/llm/openai.js.map +1 -1
  27. package/dist/llm/openrouter.js +4 -0
  28. package/dist/llm/openrouter.js.map +1 -1
  29. package/dist/llm/provider.js +8 -2
  30. package/dist/llm/provider.js.map +1 -1
  31. package/dist/llm/router.js +3 -0
  32. package/dist/llm/router.js.map +1 -1
  33. package/dist/modes/ask.js +4 -0
  34. package/dist/modes/ask.js.map +1 -1
  35. package/dist/repl.js +197 -22
  36. package/dist/repl.js.map +1 -1
  37. package/dist/store/config.d.ts +3 -1
  38. package/dist/store/config.js +11 -2
  39. package/dist/store/config.js.map +1 -1
  40. package/dist/types.d.ts +7 -1
  41. package/dist/types.js +1 -0
  42. package/dist/types.js.map +1 -1
  43. package/dist/ui/markdown.d.ts +6 -0
  44. package/dist/ui/markdown.js +221 -0
  45. package/dist/ui/markdown.js.map +1 -0
  46. package/package.json +3 -1
@@ -0,0 +1,221 @@
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(body);
156
+ if (level === 3)
157
+ return chalk.bold.cyan(body);
158
+ return chalk.bold(body);
159
+ }
160
+ // Horizontal rule
161
+ if (/^\s*[-*_]{3,}\s*$/.test(line)) {
162
+ return chalk.dim(repeat("─", 60));
163
+ }
164
+ // Blockquote
165
+ if (line.startsWith("> ")) {
166
+ return chalk.dim("│ ") + chalk.dim.italic(renderInlineMarkdown(line.slice(2)));
167
+ }
168
+ // Ordered list
169
+ const ordered = line.match(/^(\s*)(\d+)\.\s+(.*)$/);
170
+ if (ordered) {
171
+ return `${ordered[1]}${chalk.cyan(`${ordered[2]}.`)} ${renderInlineMarkdown(ordered[3])}`;
172
+ }
173
+ // Unordered list
174
+ const unordered = line.match(/^(\s*)[-*+]\s+(.*)$/);
175
+ if (unordered) {
176
+ return `${unordered[1]}${chalk.cyan("•")} ${renderInlineMarkdown(unordered[2])}`;
177
+ }
178
+ return renderInlineMarkdown(line);
179
+ }
180
+ export function renderMarkdown(text) {
181
+ if (!text)
182
+ return text;
183
+ const state = { inFence: false, fenceLang: "" };
184
+ const lines = text.split("\n");
185
+ return lines.map((line) => renderBlockLine(line, state)).join("\n");
186
+ }
187
+ // Streaming variant: buffers tokens and emits ANSI-rendered output
188
+ // whenever a complete line arrives. Inside a fenced code block, lines
189
+ // are emitted as cyan text with header/footer borders.
190
+ export function createMarkdownStreamWriter(write) {
191
+ const state = { inFence: false, fenceLang: "" };
192
+ let buffer = "";
193
+ const emitLine = (line, withNewline) => {
194
+ write(renderBlockLine(line, state));
195
+ if (withNewline)
196
+ write("\n");
197
+ };
198
+ return {
199
+ push(token) {
200
+ buffer += token;
201
+ let newlineIndex = buffer.indexOf("\n");
202
+ while (newlineIndex !== -1) {
203
+ const line = buffer.slice(0, newlineIndex);
204
+ buffer = buffer.slice(newlineIndex + 1);
205
+ emitLine(line, true);
206
+ newlineIndex = buffer.indexOf("\n");
207
+ }
208
+ },
209
+ finish() {
210
+ if (buffer.length > 0) {
211
+ emitLine(buffer, false);
212
+ buffer = "";
213
+ }
214
+ if (state.inFence) {
215
+ // Emit a closing rule so unterminated fences still look tidy.
216
+ write("\n" + renderFenceFooter());
217
+ }
218
+ },
219
+ };
220
+ }
221
+ //# 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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pentoshi/clai",
3
- "version": "0.3.1",
3
+ "version": "0.5.1",
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",
@@ -21,6 +21,8 @@
21
21
  "llm",
22
22
  "groq",
23
23
  "gemini",
24
+ "nvidia",
25
+ "nim",
24
26
  "ollama"
25
27
  ],
26
28
  "bin": {