@pentoshi/clai 1.2.9 → 2.0.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 (68) hide show
  1. package/README.md +46 -2
  2. package/dist/agent/context-manager.d.ts +14 -0
  3. package/dist/agent/context-manager.js +61 -0
  4. package/dist/agent/context-manager.js.map +1 -1
  5. package/dist/agent/runner.d.ts +6 -0
  6. package/dist/agent/runner.js +24 -3
  7. package/dist/agent/runner.js.map +1 -1
  8. package/dist/commands/update.js +1 -1
  9. package/dist/index.js +3 -17
  10. package/dist/index.js.map +1 -1
  11. package/dist/modes/agent.d.ts +4 -0
  12. package/dist/modes/agent.js.map +1 -1
  13. package/dist/repl.d.ts +5 -0
  14. package/dist/repl.js +8 -2
  15. package/dist/repl.js.map +1 -1
  16. package/dist/store/history.d.ts +7 -1
  17. package/dist/store/history.js +34 -3
  18. package/dist/store/history.js.map +1 -1
  19. package/dist/tools/registry.d.ts +4 -0
  20. package/dist/tools/registry.js +57 -1
  21. package/dist/tools/registry.js.map +1 -1
  22. package/dist/tools/shell.d.ts +2 -0
  23. package/dist/tools/shell.js +5 -1
  24. package/dist/tools/shell.js.map +1 -1
  25. package/dist/tui/App.d.ts +2 -1
  26. package/dist/tui/App.js +696 -100
  27. package/dist/tui/App.js.map +1 -1
  28. package/dist/tui/components/ConfirmModal.js +2 -2
  29. package/dist/tui/components/ConfirmModal.js.map +1 -1
  30. package/dist/tui/components/Pager.d.ts +6 -5
  31. package/dist/tui/components/Pager.js +17 -26
  32. package/dist/tui/components/Pager.js.map +1 -1
  33. package/dist/tui/components/PickerPanel.d.ts +13 -0
  34. package/dist/tui/components/PickerPanel.js +68 -0
  35. package/dist/tui/components/PickerPanel.js.map +1 -0
  36. package/dist/tui/components/SecretInputPanel.d.ts +6 -0
  37. package/dist/tui/components/SecretInputPanel.js +25 -0
  38. package/dist/tui/components/SecretInputPanel.js.map +1 -0
  39. package/dist/tui/default.d.ts +6 -0
  40. package/dist/tui/default.js +11 -0
  41. package/dist/tui/default.js.map +1 -0
  42. package/dist/tui/hooks/useAgentRunner.d.ts +13 -2
  43. package/dist/tui/hooks/useAgentRunner.js +48 -3
  44. package/dist/tui/hooks/useAgentRunner.js.map +1 -1
  45. package/dist/tui/hooks/useTerminalSize.d.ts +9 -0
  46. package/dist/tui/hooks/useTerminalSize.js +26 -0
  47. package/dist/tui/hooks/useTerminalSize.js.map +1 -0
  48. package/dist/tui/index.js +23 -10
  49. package/dist/tui/index.js.map +1 -1
  50. package/dist/tui/render-lines.d.ts +15 -0
  51. package/dist/tui/render-lines.js +165 -0
  52. package/dist/tui/render-lines.js.map +1 -0
  53. package/dist/tui/state.d.ts +12 -10
  54. package/dist/tui/state.js +83 -57
  55. package/dist/tui/state.js.map +1 -1
  56. package/package.json +1 -1
  57. package/dist/tui/components/Composer.d.ts +0 -6
  58. package/dist/tui/components/Composer.js +0 -122
  59. package/dist/tui/components/Composer.js.map +0 -1
  60. package/dist/tui/components/Header.d.ts +0 -7
  61. package/dist/tui/components/Header.js +0 -6
  62. package/dist/tui/components/Header.js.map +0 -1
  63. package/dist/tui/components/StatusLine.d.ts +0 -7
  64. package/dist/tui/components/StatusLine.js +0 -25
  65. package/dist/tui/components/StatusLine.js.map +0 -1
  66. package/dist/tui/components/items.d.ts +0 -5
  67. package/dist/tui/components/items.js +0 -57
  68. package/dist/tui/components/items.js.map +0 -1
@@ -0,0 +1,26 @@
1
+ import { useEffect, useState } from "react";
2
+ import { useStdout } from "ink";
3
+ /**
4
+ * Tracks the terminal size and updates on SIGWINCH-style resize events so the
5
+ * full-screen layout can reflow and keep the composer pinned to the bottom.
6
+ */
7
+ export function useTerminalSize() {
8
+ const { stdout } = useStdout();
9
+ const [size, setSize] = useState({
10
+ columns: stdout?.columns ?? 80,
11
+ rows: stdout?.rows ?? 24,
12
+ });
13
+ useEffect(() => {
14
+ if (!stdout)
15
+ return;
16
+ const onResize = () => {
17
+ setSize({ columns: stdout.columns ?? 80, rows: stdout.rows ?? 24 });
18
+ };
19
+ stdout.on("resize", onResize);
20
+ return () => {
21
+ stdout.off("resize", onResize);
22
+ };
23
+ }, [stdout]);
24
+ return size;
25
+ }
26
+ //# sourceMappingURL=useTerminalSize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useTerminalSize.js","sourceRoot":"","sources":["../../../src/tui/hooks/useTerminalSize.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,CAAC;AAOhC;;;GAGG;AACH,MAAM,UAAU,eAAe;IAC7B,MAAM,EAAE,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IAC/B,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,QAAQ,CAAW;QACzC,OAAO,EAAE,MAAM,EAAE,OAAO,IAAI,EAAE;QAC9B,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,EAAE;KACzB,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,MAAM,QAAQ,GAAG,GAAS,EAAE;YAC1B,OAAO,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC,CAAC;QACF,MAAM,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAC9B,OAAO,GAAG,EAAE;YACV,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QACjC,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAEb,OAAO,IAAI,CAAC;AACd,CAAC"}
package/dist/tui/index.js CHANGED
@@ -8,15 +8,28 @@ export async function startTui(opts = {}) {
8
8
  const provider = opts.provider ?? config.defaultProvider;
9
9
  const model = opts.model ?? getProviderModel(provider);
10
10
  const mode = opts.mode ?? config.defaultMode;
11
- const app = render(createElement(App, {
12
- version: getCurrentVersion(),
13
- initialMode: mode,
14
- provider,
15
- initialModel: model,
16
- }), {
17
- // We own Ctrl+C handling (abort vs. exit), so Ink must not exit on it.
18
- exitOnCtrlC: false,
19
- });
20
- await app.waitUntilExit();
11
+ // Enter and clear the alternate screen before Ink's first paint. Doing this
12
+ // in a React effect erases that first frame and leaves a blank terminal
13
+ // until a resize causes another render (notably in macOS Terminal).
14
+ const alternateScreen = Boolean(process.stdout.isTTY);
15
+ if (alternateScreen)
16
+ process.stdout.write("\x1b[?1049h\x1b[2J\x1b[H");
17
+ try {
18
+ const app = render(createElement(App, {
19
+ version: getCurrentVersion(),
20
+ initialMode: mode,
21
+ provider,
22
+ initialModel: model,
23
+ noHistory: opts.noHistory,
24
+ }), {
25
+ // We own Ctrl+C handling (abort vs. exit), so Ink must not exit on it.
26
+ exitOnCtrlC: false,
27
+ });
28
+ await app.waitUntilExit();
29
+ }
30
+ finally {
31
+ if (alternateScreen)
32
+ process.stdout.write("\x1b[?1049l");
33
+ }
21
34
  }
22
35
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAS/B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB,EAAE;IACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;IAE7C,MAAM,GAAG,GAAG,MAAM,CAChB,aAAa,CAAC,GAAG,EAAE;QACjB,OAAO,EAAE,iBAAiB,EAAE;QAC5B,WAAW,EAAE,IAAI;QACjB,QAAQ;QACR,YAAY,EAAE,KAAK;KACpB,CAAC,EACF;QACE,uEAAuE;QACvE,WAAW,EAAE,KAAK;KACnB,CACF,CAAC;IAEF,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tui/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAS/B,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB,EAAE;IACvD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,eAAe,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,gBAAgB,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,CAAC;IAE7C,4EAA4E;IAC5E,wEAAwE;IACxE,oEAAoE;IACpE,MAAM,eAAe,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,eAAe;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;IACtE,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,CAChB,aAAa,CAAC,GAAG,EAAE;YACjB,OAAO,EAAE,iBAAiB,EAAE;YAC5B,WAAW,EAAE,IAAI;YACjB,QAAQ;YACR,YAAY,EAAE,KAAK;YACnB,SAAS,EAAE,IAAI,CAAC,SAAS;SAC1B,CAAC,EACF;YACE,uEAAuE;YACvE,WAAW,EAAE,KAAK;SACnB,CACF,CAAC;QACF,MAAM,GAAG,CAAC,aAAa,EAAE,CAAC;IAC5B,CAAC;YAAS,CAAC;QACT,IAAI,eAAe;YAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { TranscriptItem, TuiState } from "./state.js";
2
+ export interface RenderCtx {
3
+ width: number;
4
+ thinkingExpanded: boolean;
5
+ outputExpanded: boolean;
6
+ running: boolean;
7
+ }
8
+ export declare function renderItemLines(item: TranscriptItem, ctx: RenderCtx): string[];
9
+ /**
10
+ * Flatten the whole transcript (plus any transient streaming text) into a
11
+ * single array of ANSI lines, separated by blank lines, ready for the
12
+ * scrolling viewport. Rendering to lines (rather than Ink boxes) lets toggles
13
+ * like Ctrl+T / Ctrl+O recompute in place and lets us pin the composer.
14
+ */
15
+ export declare function renderTranscriptLines(state: TuiState, ctx: RenderCtx): string[];
@@ -0,0 +1,165 @@
1
+ import chalk from "chalk";
2
+ import { renderMarkdown, wrapAnsiLine } from "../ui/markdown.js";
3
+ import { renderPlanChecklist } from "../ui/plan-pane.js";
4
+ const COLLAPSED_OUTPUT_LINES = 3;
5
+ function wrap(text, width) {
6
+ const out = [];
7
+ for (const line of text.split("\n")) {
8
+ out.push(...wrapAnsiLine(line, Math.max(10, width)));
9
+ }
10
+ return out;
11
+ }
12
+ function statusGlyph(status) {
13
+ switch (status) {
14
+ case "running":
15
+ return chalk.yellow("●");
16
+ case "ok":
17
+ return chalk.green("✓");
18
+ case "fail":
19
+ return chalk.red("✗");
20
+ case "blocked":
21
+ return chalk.red("⊘");
22
+ }
23
+ }
24
+ function gutterColor(status) {
25
+ switch (status) {
26
+ case "running":
27
+ return chalk.yellow;
28
+ case "ok":
29
+ return chalk.green;
30
+ case "fail":
31
+ case "blocked":
32
+ return chalk.red;
33
+ }
34
+ }
35
+ function looksLikeToolFence(text) {
36
+ const t = text.trimStart();
37
+ return (/^```\s*(tool|json)?/i.test(t) ||
38
+ /^\{[\s\S]*"name"\s*:/.test(t) ||
39
+ /^<tool/i.test(t));
40
+ }
41
+ function renderUser(text, width) {
42
+ const tag = chalk.bgMagenta.whiteBright.bold(" you ");
43
+ const body = chalk.bold(text);
44
+ const lines = wrap(body, width - 8);
45
+ return lines.map((l, i) => i === 0 ? `${tag} ${l}` : ` ${l}`);
46
+ }
47
+ function renderAssistant(text, width) {
48
+ const label = chalk.magenta.bold("◆ Response");
49
+ const md = renderMarkdown(text).replace(/\n+$/, "");
50
+ return [label, ...md.split("\n").map((line) => ` ${line}`)];
51
+ }
52
+ function renderThinking(content, ctx) {
53
+ if (!ctx.thinkingExpanded) {
54
+ return [chalk.dim.italic("✦ thinking") + chalk.dim(" · ctrl+t or /think to view")];
55
+ }
56
+ const head = chalk.dim.italic("✦ thinking");
57
+ const body = wrap(content.trim(), ctx.width - 4).map((l) => chalk.dim(" " + l));
58
+ return [head, ...body];
59
+ }
60
+ function renderTool(item, ctx) {
61
+ const color = gutterColor(item.status);
62
+ const bar = color("│ ");
63
+ const top = color("╭ ");
64
+ const bottom = color("╰ ");
65
+ const header = top +
66
+ statusGlyph(item.status) +
67
+ " " +
68
+ chalk.bold.cyan(item.name) +
69
+ (typeof item.exitCode === "number" && item.exitCode !== 0
70
+ ? chalk.red(` (exit ${item.exitCode})`)
71
+ : "");
72
+ const lines = wrap(header, ctx.width).map((l, i) => i === 0 ? l : color("│ ") + l);
73
+ if (item.argsDisplay) {
74
+ const label = item.name === "shell.exec" ? "command" : "input";
75
+ lines.push(bar + chalk.dim(`${label}: `) + chalk.white(item.argsDisplay));
76
+ }
77
+ if (item.status === "blocked" && item.summary) {
78
+ for (const l of wrap(chalk.red(item.summary), ctx.width - 4)) {
79
+ lines.push(bar + l);
80
+ }
81
+ }
82
+ const rawLines = item.output ? item.output.replace(/\n+$/, "").split("\n") : [];
83
+ let shown = rawLines;
84
+ let hidden = 0;
85
+ if (!ctx.outputExpanded && item.status !== "running") {
86
+ if (rawLines.length > COLLAPSED_OUTPUT_LINES) {
87
+ shown = rawLines.slice(0, COLLAPSED_OUTPUT_LINES);
88
+ hidden = rawLines.length - shown.length;
89
+ }
90
+ }
91
+ else if (item.status === "running") {
92
+ // While running, follow the tail so progress is visible.
93
+ shown = rawLines.slice(-8);
94
+ }
95
+ if (shown.length > 0)
96
+ lines.push(bar + chalk.dim("output:"));
97
+ for (const raw of shown) {
98
+ for (const wl of wrapAnsiLine(raw, Math.max(10, ctx.width - 2))) {
99
+ lines.push(bar + " " + chalk.dim(wl));
100
+ }
101
+ }
102
+ if (item.artifactPath) {
103
+ lines.push(bar + chalk.dim("saved: ") + chalk.cyan(item.artifactPath));
104
+ }
105
+ if (hidden > 0) {
106
+ lines.push(bottom + chalk.dim(`+${hidden} more line(s) · ctrl+o to expand`));
107
+ }
108
+ else if (item.output || item.status !== "running") {
109
+ lines.push(color("╰"));
110
+ }
111
+ return lines;
112
+ }
113
+ function renderNotice(level, text, width) {
114
+ const glyph = level === "warn" ? chalk.yellow("⚠") : chalk.dim("ℹ");
115
+ const color = level === "warn" ? chalk.yellow : chalk.dim;
116
+ return wrap(text, width - 2).map((l, i) => (i === 0 ? `${glyph} ${color(l)}` : ` ${color(l)}`));
117
+ }
118
+ export function renderItemLines(item, ctx) {
119
+ switch (item.kind) {
120
+ case "user":
121
+ return renderUser(item.text, ctx.width);
122
+ case "assistant":
123
+ return renderAssistant(item.text, ctx.width);
124
+ case "thinking":
125
+ return renderThinking(item.content, ctx);
126
+ case "tool":
127
+ return renderTool(item, ctx);
128
+ case "notice":
129
+ return renderNotice(item.level, item.text, ctx.width);
130
+ case "plan":
131
+ return renderPlanChecklist(item.plan).split("\n");
132
+ }
133
+ }
134
+ /**
135
+ * Flatten the whole transcript (plus any transient streaming text) into a
136
+ * single array of ANSI lines, separated by blank lines, ready for the
137
+ * scrolling viewport. Rendering to lines (rather than Ink boxes) lets toggles
138
+ * like Ctrl+T / Ctrl+O recompute in place and lets us pin the composer.
139
+ */
140
+ export function renderTranscriptLines(state, ctx) {
141
+ const blocks = [];
142
+ for (const item of state.items) {
143
+ blocks.push(renderItemLines(item, ctx));
144
+ }
145
+ // While generating: show the live thinking preview (before any response
146
+ // streams). Once the step finishes it commits as a collapsed thinking hint.
147
+ if (state.status.running && state.thinkingPreview && !state.streaming) {
148
+ const body = wrap(state.thinkingPreview, ctx.width - 4).map((l) => chalk.dim(" " + l));
149
+ blocks.push([chalk.dim.italic("✦ thinking…"), ...body]);
150
+ }
151
+ // Transient streaming text for the active step (suppressed when it is a
152
+ // tool-call fence, which will be replaced by a clean tool card).
153
+ if (state.streaming && !looksLikeToolFence(state.streaming)) {
154
+ const md = renderMarkdown(state.streaming).replace(/\n+$/, "");
155
+ blocks.push([chalk.magenta.bold("◆ Response"), ...md.split("\n").map((line) => ` ${line}`), chalk.magenta(" ▌")]);
156
+ }
157
+ const lines = [];
158
+ blocks.forEach((block, i) => {
159
+ if (i > 0)
160
+ lines.push("");
161
+ lines.push(...block);
162
+ });
163
+ return lines;
164
+ }
165
+ //# sourceMappingURL=render-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-lines.js","sourceRoot":"","sources":["../../src/tui/render-lines.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,6 @@
1
1
  import type { AgentEvent } from "../agent/events.js";
2
2
  import type { SessionPlan } from "../store/plan.js";
3
+ import type { ChatMessage } from "../types.js";
3
4
  export type ToolStatus = "running" | "ok" | "fail" | "blocked";
4
5
  export interface UserItem {
5
6
  kind: "user";
@@ -46,6 +47,8 @@ export interface PlanItem {
46
47
  done: boolean;
47
48
  }
48
49
  export type TranscriptItem = UserItem | AssistantItem | ThinkingItem | ToolItem | NoticeItem | PlanItem;
50
+ /** Plain, detailed session record used as source material for model compaction. */
51
+ export declare function serializeTranscriptForCompaction(items: TranscriptItem[]): string;
49
52
  export interface PendingConfirm {
50
53
  id: string;
51
54
  kind: "tool" | "pentest";
@@ -59,9 +62,12 @@ export interface TurnStatus {
59
62
  }
60
63
  export interface TuiState {
61
64
  items: TranscriptItem[];
65
+ /** Transient assistant text streamed for the current step (not yet committed). */
66
+ streaming: string;
62
67
  status: TurnStatus;
63
68
  thinkingPreview: string;
64
69
  thinkingExpanded: boolean;
70
+ outputExpanded: boolean;
65
71
  pendingConfirm: PendingConfirm | undefined;
66
72
  queued: string[];
67
73
  }
@@ -83,19 +89,15 @@ export type TuiAction = {
83
89
  text: string;
84
90
  } | {
85
91
  type: "toggle-thinking";
92
+ } | {
93
+ type: "toggle-output";
86
94
  } | {
87
95
  type: "confirm-resolved";
96
+ } | {
97
+ type: "load-history";
98
+ messages: ChatMessage[];
99
+ transcript?: TranscriptItem[] | undefined;
88
100
  } | {
89
101
  type: "reset";
90
102
  };
91
103
  export declare function reducer(state: TuiState, action: TuiAction): TuiState;
92
- /**
93
- * Split the transcript into a finalized prefix (safe to render once in
94
- * Ink's <Static>) and a live suffix that may still mutate this turn.
95
- * The boundary is the first not-yet-done item, which keeps chronological
96
- * order intact even when later items finalize before earlier ones.
97
- */
98
- export declare function splitItems(items: TranscriptItem[]): {
99
- committed: TranscriptItem[];
100
- live: TranscriptItem[];
101
- };
package/dist/tui/state.js CHANGED
@@ -1,9 +1,43 @@
1
+ const MAX_COMPACTION_FIELD_CHARS = 12_000;
2
+ function compactField(value) {
3
+ if (value.length <= MAX_COMPACTION_FIELD_CHARS)
4
+ return value;
5
+ return `${value.slice(0, MAX_COMPACTION_FIELD_CHARS)}\n…[truncated; full output remains in the session transcript/artifact]`;
6
+ }
7
+ /** Plain, detailed session record used as source material for model compaction. */
8
+ export function serializeTranscriptForCompaction(items) {
9
+ return items.map((item) => {
10
+ switch (item.kind) {
11
+ case "user":
12
+ return `USER INTENT/PROMPT:\n${compactField(item.text)}`;
13
+ case "assistant":
14
+ return `ASSISTANT RESPONSE:\n${compactField(item.text)}`;
15
+ case "thinking":
16
+ return `REASONING/STEP NOTES:\n${compactField(item.content)}`;
17
+ case "tool":
18
+ return [
19
+ `TOOL/COMMAND: ${item.name}`,
20
+ `INPUT: ${compactField(item.argsDisplay)}`,
21
+ `STATUS: ${item.status}${typeof item.exitCode === "number" ? ` (exit ${item.exitCode})` : ""}`,
22
+ item.summary ? `RESULT SUMMARY: ${compactField(item.summary)}` : "",
23
+ `OUTPUT/RESULT:\n${compactField(item.output)}`,
24
+ item.artifactPath ? `FULL ARTIFACT: ${item.artifactPath}` : "",
25
+ ].filter(Boolean).join("\n");
26
+ case "notice":
27
+ return `SESSION EVENT (${item.level}): ${compactField(item.text)}`;
28
+ case "plan":
29
+ return `PLAN/TASK STATE:\n${compactField(JSON.stringify(item.plan, null, 2))}`;
30
+ }
31
+ }).join("\n\n---\n\n");
32
+ }
1
33
  export function initialState() {
2
34
  return {
3
35
  items: [],
36
+ streaming: "",
4
37
  status: { running: false, activity: "", step: 0, startedAt: undefined },
5
38
  thinkingPreview: "",
6
39
  thinkingExpanded: false,
40
+ outputExpanded: false,
7
41
  pendingConfirm: undefined,
8
42
  queued: [],
9
43
  };
@@ -20,6 +54,8 @@ export function reducer(state, action) {
20
54
  return initialState();
21
55
  case "toggle-thinking":
22
56
  return { ...state, thinkingExpanded: !state.thinkingExpanded };
57
+ case "toggle-output":
58
+ return { ...state, outputExpanded: !state.outputExpanded };
23
59
  case "queue":
24
60
  return { ...state, queued: [...state.queued, action.text] };
25
61
  case "dequeue": {
@@ -28,6 +64,24 @@ export function reducer(state, action) {
28
64
  }
29
65
  case "confirm-resolved":
30
66
  return { ...state, pendingConfirm: undefined };
67
+ case "load-history": {
68
+ if (action.transcript?.length) {
69
+ return {
70
+ ...initialState(),
71
+ items: action.transcript.map((item) => ({ ...item, done: true })),
72
+ };
73
+ }
74
+ const items = action.messages.flatMap((message) => {
75
+ if (message.role === "user") {
76
+ return [{ kind: "user", id: nextId("history-user"), text: message.content, done: true }];
77
+ }
78
+ if (message.role === "assistant") {
79
+ return [{ kind: "assistant", id: nextId("history-asst"), text: message.content, streaming: false, done: true }];
80
+ }
81
+ return [];
82
+ });
83
+ return { ...initialState(), items };
84
+ }
31
85
  case "notice":
32
86
  return {
33
87
  ...state,
@@ -54,6 +108,7 @@ export function reducer(state, action) {
54
108
  done: true,
55
109
  },
56
110
  ],
111
+ streaming: "",
57
112
  status: {
58
113
  running: true,
59
114
  activity: "thinking",
@@ -102,49 +157,35 @@ function applyEvent(state, event) {
102
157
  },
103
158
  ],
104
159
  };
105
- case "assistant-delta": {
106
- const items = [...state.items];
107
- const last = items[items.length - 1];
108
- if (last && last.kind === "assistant" && !last.done) {
109
- items[items.length - 1] = { ...last, text: last.text + event.text };
110
- }
111
- else {
112
- items.push({
113
- kind: "assistant",
114
- id: nextId("asst"),
115
- text: event.text,
116
- streaming: true,
117
- done: false,
118
- });
119
- }
160
+ case "assistant-delta":
161
+ // Buffer transient streaming text. It is NOT committed as a transcript
162
+ // item until `assistant-message`, and is discarded on `tool-call` (the
163
+ // tokens were a tool-call fence, not prose) so raw JSON never lingers.
120
164
  return {
121
165
  ...state,
122
- thinkingPreview: "",
123
166
  status: { ...state.status, activity: "responding" },
124
- items,
167
+ streaming: state.streaming + event.text,
125
168
  };
126
- }
127
169
  case "assistant-message": {
128
- const items = [...state.items];
129
- const last = items[items.length - 1];
130
- if (last && last.kind === "assistant" && !last.done) {
131
- items[items.length - 1] = {
132
- ...last,
133
- text: event.text,
134
- streaming: false,
135
- done: true,
136
- };
137
- }
138
- else {
139
- items.push({
140
- kind: "assistant",
141
- id: nextId("asst"),
142
- text: event.text,
143
- streaming: false,
144
- done: true,
145
- });
170
+ const text = event.text.trim();
171
+ if (!text) {
172
+ return { ...state, streaming: "" };
146
173
  }
147
- return { ...state, thinkingPreview: "", items };
174
+ return {
175
+ ...state,
176
+ streaming: "",
177
+ thinkingPreview: "",
178
+ items: [
179
+ ...state.items,
180
+ {
181
+ kind: "assistant",
182
+ id: nextId("asst"),
183
+ text,
184
+ streaming: false,
185
+ done: true,
186
+ },
187
+ ],
188
+ };
148
189
  }
149
190
  case "notice":
150
191
  return {
@@ -161,8 +202,10 @@ function applyEvent(state, event) {
161
202
  ],
162
203
  };
163
204
  case "tool-call":
205
+ // A real tool call supersedes any streamed tool-call fence text.
164
206
  return {
165
207
  ...state,
208
+ streaming: "",
166
209
  status: { ...state.status, activity: event.name },
167
210
  items: [
168
211
  ...state.items,
@@ -211,6 +254,7 @@ function applyEvent(state, event) {
211
254
  }
212
255
  return {
213
256
  ...state,
257
+ streaming: "",
214
258
  items: [
215
259
  ...state.items,
216
260
  {
@@ -280,6 +324,7 @@ function applyEvent(state, event) {
280
324
  return {
281
325
  ...state,
282
326
  items,
327
+ streaming: "",
283
328
  thinkingPreview: "",
284
329
  pendingConfirm: undefined,
285
330
  status: { running: false, activity: "", step: 0, startedAt: undefined },
@@ -288,7 +333,7 @@ function applyEvent(state, event) {
288
333
  }
289
334
  }
290
335
  // ── Helpers ──────────────────────────────────────────────────────────────────
291
- const TOOL_OUTPUT_CAP = 8000;
336
+ const TOOL_OUTPUT_CAP = 20000;
292
337
  function capOutput(text) {
293
338
  if (text.length <= TOOL_OUTPUT_CAP)
294
339
  return text;
@@ -301,23 +346,4 @@ function tailPreview(text) {
301
346
  return collapsed;
302
347
  return `…${collapsed.slice(collapsed.length - PREVIEW_CAP)}`;
303
348
  }
304
- /**
305
- * Split the transcript into a finalized prefix (safe to render once in
306
- * Ink's <Static>) and a live suffix that may still mutate this turn.
307
- * The boundary is the first not-yet-done item, which keeps chronological
308
- * order intact even when later items finalize before earlier ones.
309
- */
310
- export function splitItems(items) {
311
- let boundary = items.length;
312
- for (let i = 0; i < items.length; i += 1) {
313
- if (!items[i].done) {
314
- boundary = i;
315
- break;
316
- }
317
- }
318
- return {
319
- committed: items.slice(0, boundary),
320
- live: items.slice(boundary),
321
- };
322
- }
323
349
  //# sourceMappingURL=state.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pentoshi/clai",
3
- "version": "1.2.9",
3
+ "version": "2.0.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",
@@ -1,6 +0,0 @@
1
- export interface ComposerProps {
2
- busy: boolean;
3
- disabled: boolean;
4
- onSubmit: (text: string) => void;
5
- }
6
- export declare function Composer({ busy, disabled, onSubmit }: ComposerProps): import("react").JSX.Element;