@pentoshi/clai 2.0.42 → 2.0.43
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/dist/agent/context-manager.d.ts +5 -5
- package/dist/agent/context-manager.js +34 -10
- package/dist/agent/context-manager.js.map +1 -1
- package/dist/agent/runner.js +117 -21
- package/dist/agent/runner.js.map +1 -1
- package/dist/agent/tool-call-parser.d.ts +16 -0
- package/dist/agent/tool-call-parser.js +100 -4
- package/dist/agent/tool-call-parser.js.map +1 -1
- package/dist/commands/update.js +1 -1
- package/dist/prompts/index.d.ts +2 -2
- package/dist/prompts/index.js +12 -5
- package/dist/prompts/index.js.map +1 -1
- package/dist/repl.js +19 -2
- package/dist/repl.js.map +1 -1
- package/dist/tools/registry.js +2 -2
- package/dist/tools/registry.js.map +1 -1
- package/dist/tui/App.js +7 -2
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/render-lines.js +20 -5
- package/dist/tui/render-lines.js.map +1 -1
- package/dist/ui/intro-card.js +47 -8
- package/dist/ui/intro-card.js.map +1 -1
- package/package.json +1 -1
package/dist/ui/intro-card.js
CHANGED
|
@@ -2,8 +2,19 @@ import chalk from "chalk";
|
|
|
2
2
|
import { homedir } from "node:os";
|
|
3
3
|
import { box } from "./ansi-box.js";
|
|
4
4
|
import { renderWordmark } from "./wordmark.js";
|
|
5
|
+
/** Terminal width, clamped to a sensible band. */
|
|
6
|
+
function termWidth() {
|
|
7
|
+
return process.stdout.columns ?? 80;
|
|
8
|
+
}
|
|
9
|
+
/** Truncate a string (ANSI-unaware) to fit within `max` visible chars. */
|
|
10
|
+
function truncate(str, max) {
|
|
11
|
+
if (str.length <= max)
|
|
12
|
+
return str;
|
|
13
|
+
return max > 3 ? str.slice(0, max - 1) + "…" : str.slice(0, max);
|
|
14
|
+
}
|
|
5
15
|
/** Startup intro: wordmark, tagline, and a session-info card. */
|
|
6
16
|
export function renderIntroCard(opts) {
|
|
17
|
+
const cols = termWidth();
|
|
7
18
|
const home = homedir();
|
|
8
19
|
const workdir = opts.workdir.startsWith(home)
|
|
9
20
|
? `~${opts.workdir.slice(home.length)}`
|
|
@@ -12,21 +23,49 @@ export function renderIntroCard(opts) {
|
|
|
12
23
|
parts.push("");
|
|
13
24
|
parts.push(renderWordmark("CLAI"));
|
|
14
25
|
parts.push("");
|
|
15
|
-
|
|
26
|
+
// Tagline — truncate if terminal is very narrow
|
|
27
|
+
const tagline = "AI-powered terminal assistant · ask & agent modes for shell, files & security workflows";
|
|
28
|
+
parts.push(` ${chalk.white(truncate(tagline, cols - 4))}`);
|
|
16
29
|
parts.push(` ${chalk.green("Welcome to clai")} ${chalk.green.bold(`v${opts.version}`)}${chalk.green("!")} ${chalk.cyan("/help for commands.")}`);
|
|
17
30
|
parts.push("");
|
|
31
|
+
// Box — clamp minWidth to terminal width (minus box borders + padding = 8 chars)
|
|
32
|
+
const boxMinWidth = Math.min(58, cols - 8);
|
|
33
|
+
// Also truncate long values so they fit in the box
|
|
34
|
+
const maxVal = Math.max(20, cols - 22); // label is ~14 chars + borders ~8
|
|
18
35
|
parts.push(box([
|
|
19
|
-
`${chalk.dim("↳ workdir:")} ${workdir}`,
|
|
20
|
-
`${chalk.dim("↳ model:")} ${chalk.cyan(opts.model)}`,
|
|
21
|
-
`${chalk.dim("↳ provider:")} ${chalk.green(opts.provider)}`,
|
|
36
|
+
`${chalk.dim("↳ workdir:")} ${truncate(workdir, maxVal)}`,
|
|
37
|
+
`${chalk.dim("↳ model:")} ${chalk.cyan(truncate(opts.model, maxVal))}`,
|
|
38
|
+
`${chalk.dim("↳ provider:")} ${chalk.green(truncate(opts.provider, maxVal))}`,
|
|
22
39
|
`${chalk.dim("↳ mode:")} ${chalk.yellow(opts.mode)}`,
|
|
23
40
|
`${chalk.dim("↳ version:")} ${chalk.white(opts.version)}`,
|
|
24
|
-
], { minWidth:
|
|
41
|
+
], { minWidth: Math.max(20, boxMinWidth) }));
|
|
25
42
|
parts.push("");
|
|
43
|
+
// Mode + permission badges — stack vertically on narrow terminals
|
|
26
44
|
const permColor = opts.permissions === "allow-all" ? "#16a34a" : "#475569";
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
45
|
+
const modeBadge = chalk.bgHex("#B45309").whiteBright.bold(` ${opts.mode.toUpperCase()} MODE `);
|
|
46
|
+
const permBadge = chalk.bgHex(permColor).whiteBright.bold(` ${opts.permissions.toUpperCase()} `);
|
|
47
|
+
const badgeLine = ` ${modeBadge} ${permBadge}`;
|
|
48
|
+
// " AGENT MODE ALLOW-ALL " is ~30 visible chars; safe for most widths
|
|
49
|
+
// But measure it properly: each badge is mode.len+8 + perm.len+4 + gaps
|
|
50
|
+
const badgeVisLen = opts.mode.length + 8 + opts.permissions.length + 4 + 6;
|
|
51
|
+
if (badgeVisLen > cols) {
|
|
52
|
+
// Stack them vertically
|
|
53
|
+
parts.push(` ${modeBadge}`);
|
|
54
|
+
parts.push(` ${permBadge}`);
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
parts.push(badgeLine);
|
|
58
|
+
}
|
|
59
|
+
// Shortcuts — pick a set that fits the terminal width
|
|
60
|
+
const fullShortcuts = "ESC abort │ Ctrl+C clears input │ @ attach files │ Ctrl+T thinking │ Ctrl+O output │ Ctrl+P plan";
|
|
61
|
+
const shortShortcuts = "ESC abort │ Ctrl+C clear │ @ files │ Ctrl+T think │ Ctrl+O out │ Ctrl+P plan";
|
|
62
|
+
const miniShortcuts = "ESC abort │ Ctrl+C clear │ /help";
|
|
63
|
+
const shortcutsText = cols >= 110
|
|
64
|
+
? fullShortcuts
|
|
65
|
+
: cols >= 80
|
|
66
|
+
? shortShortcuts
|
|
67
|
+
: miniShortcuts;
|
|
68
|
+
parts.push(chalk.dim(` ${truncate(shortcutsText, cols - 4)}`));
|
|
30
69
|
return parts.join("\n");
|
|
31
70
|
}
|
|
32
71
|
export function renderIntroSuggestions() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intro-card.js","sourceRoot":"","sources":["../../src/ui/intro-card.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAW/C,iEAAiE;AACjE,MAAM,UAAU,eAAe,CAAC,IAAsB;IACpD,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3C,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;QACvC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC;IAEjB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"intro-card.js","sourceRoot":"","sources":["../../src/ui/intro-card.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED