@pentoshi/clai 1.2.6 → 1.2.7

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 (69) hide show
  1. package/dist/agent/classic-renderer.d.ts +5 -0
  2. package/dist/agent/classic-renderer.js +124 -0
  3. package/dist/agent/classic-renderer.js.map +1 -0
  4. package/dist/agent/events.d.ts +62 -0
  5. package/dist/agent/events.js +2 -0
  6. package/dist/agent/events.js.map +1 -0
  7. package/dist/agent/runner.d.ts +8 -0
  8. package/dist/agent/runner.js +195 -71
  9. package/dist/agent/runner.js.map +1 -1
  10. package/dist/commands/update.js +1 -1
  11. package/dist/index.js +32 -0
  12. package/dist/index.js.map +1 -1
  13. package/dist/llm/capabilities.js +1 -0
  14. package/dist/llm/capabilities.js.map +1 -1
  15. package/dist/llm/http.js +19 -11
  16. package/dist/llm/http.js.map +1 -1
  17. package/dist/llm/openai.js +10 -1
  18. package/dist/llm/openai.js.map +1 -1
  19. package/dist/modes/agent.d.ts +4 -1
  20. package/dist/modes/agent.js.map +1 -1
  21. package/dist/repl.js +57 -15
  22. package/dist/repl.js.map +1 -1
  23. package/dist/tui/App.d.ts +8 -0
  24. package/dist/tui/App.js +273 -0
  25. package/dist/tui/App.js.map +1 -0
  26. package/dist/tui/can-use-tui.d.ts +20 -0
  27. package/dist/tui/can-use-tui.js +28 -0
  28. package/dist/tui/can-use-tui.js.map +1 -0
  29. package/dist/tui/components/Composer.d.ts +6 -0
  30. package/dist/tui/components/Composer.js +122 -0
  31. package/dist/tui/components/Composer.js.map +1 -0
  32. package/dist/tui/components/ConfirmModal.d.ts +6 -0
  33. package/dist/tui/components/ConfirmModal.js +16 -0
  34. package/dist/tui/components/ConfirmModal.js.map +1 -0
  35. package/dist/tui/components/Header.d.ts +7 -0
  36. package/dist/tui/components/Header.js +6 -0
  37. package/dist/tui/components/Header.js.map +1 -0
  38. package/dist/tui/components/JobsPanel.d.ts +11 -0
  39. package/dist/tui/components/JobsPanel.js +55 -0
  40. package/dist/tui/components/JobsPanel.js.map +1 -0
  41. package/dist/tui/components/Pager.d.ts +13 -0
  42. package/dist/tui/components/Pager.js +46 -0
  43. package/dist/tui/components/Pager.js.map +1 -0
  44. package/dist/tui/components/StatusLine.d.ts +7 -0
  45. package/dist/tui/components/StatusLine.js +25 -0
  46. package/dist/tui/components/StatusLine.js.map +1 -0
  47. package/dist/tui/components/items.d.ts +5 -0
  48. package/dist/tui/components/items.js +57 -0
  49. package/dist/tui/components/items.js.map +1 -0
  50. package/dist/tui/confirm.d.ts +16 -0
  51. package/dist/tui/confirm.js +41 -0
  52. package/dist/tui/confirm.js.map +1 -0
  53. package/dist/tui/hooks/useAgentRunner.d.ts +36 -0
  54. package/dist/tui/hooks/useAgentRunner.js +90 -0
  55. package/dist/tui/hooks/useAgentRunner.js.map +1 -0
  56. package/dist/tui/hooks/useJobs.d.ts +7 -0
  57. package/dist/tui/hooks/useJobs.js +39 -0
  58. package/dist/tui/hooks/useJobs.js.map +1 -0
  59. package/dist/tui/hooks/useSpinner.d.ts +5 -0
  60. package/dist/tui/hooks/useSpinner.js +19 -0
  61. package/dist/tui/hooks/useSpinner.js.map +1 -0
  62. package/dist/tui/index.d.ts +8 -0
  63. package/dist/tui/index.js +22 -0
  64. package/dist/tui/index.js.map +1 -0
  65. package/dist/tui/state.d.ts +101 -0
  66. package/dist/tui/state.js +323 -0
  67. package/dist/tui/state.js.map +1 -0
  68. package/dist/types.d.ts +1 -1
  69. package/package.json +5 -2
@@ -0,0 +1,323 @@
1
+ export function initialState() {
2
+ return {
3
+ items: [],
4
+ status: { running: false, activity: "", step: 0, startedAt: undefined },
5
+ thinkingPreview: "",
6
+ thinkingExpanded: false,
7
+ pendingConfirm: undefined,
8
+ queued: [],
9
+ };
10
+ }
11
+ let idCounter = 0;
12
+ function nextId(prefix) {
13
+ idCounter += 1;
14
+ return `${prefix}-${idCounter}`;
15
+ }
16
+ // ── Reducer ──────────────────────────────────────────────────────────────────
17
+ export function reducer(state, action) {
18
+ switch (action.type) {
19
+ case "reset":
20
+ return initialState();
21
+ case "toggle-thinking":
22
+ return { ...state, thinkingExpanded: !state.thinkingExpanded };
23
+ case "queue":
24
+ return { ...state, queued: [...state.queued, action.text] };
25
+ case "dequeue": {
26
+ const [, ...rest] = state.queued;
27
+ return { ...state, queued: rest };
28
+ }
29
+ case "confirm-resolved":
30
+ return { ...state, pendingConfirm: undefined };
31
+ case "notice":
32
+ return {
33
+ ...state,
34
+ items: [
35
+ ...state.items,
36
+ {
37
+ kind: "notice",
38
+ id: nextId("notice"),
39
+ level: action.level,
40
+ text: action.text,
41
+ done: true,
42
+ },
43
+ ],
44
+ };
45
+ case "submit":
46
+ return {
47
+ ...state,
48
+ items: [
49
+ ...state.items,
50
+ {
51
+ kind: "user",
52
+ id: nextId("user"),
53
+ text: action.text,
54
+ done: true,
55
+ },
56
+ ],
57
+ status: {
58
+ running: true,
59
+ activity: "thinking",
60
+ step: 0,
61
+ startedAt: Date.now(),
62
+ },
63
+ thinkingPreview: "",
64
+ };
65
+ case "event":
66
+ return applyEvent(state, action.event);
67
+ }
68
+ }
69
+ function applyEvent(state, event) {
70
+ switch (event.type) {
71
+ case "turn-start":
72
+ return state;
73
+ case "status": {
74
+ const stepMatch = /^step (\d+)$/.exec(event.text);
75
+ return {
76
+ ...state,
77
+ status: {
78
+ ...state.status,
79
+ running: true,
80
+ activity: event.text,
81
+ step: stepMatch ? Number(stepMatch[1]) : state.status.step,
82
+ },
83
+ };
84
+ }
85
+ case "thinking-delta":
86
+ return {
87
+ ...state,
88
+ status: { ...state.status, activity: "thinking" },
89
+ thinkingPreview: tailPreview(state.thinkingPreview + event.text),
90
+ };
91
+ case "thinking-block":
92
+ return {
93
+ ...state,
94
+ thinkingPreview: "",
95
+ items: [
96
+ ...state.items,
97
+ {
98
+ kind: "thinking",
99
+ id: nextId("think"),
100
+ content: event.content,
101
+ done: true,
102
+ },
103
+ ],
104
+ };
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
+ }
120
+ return {
121
+ ...state,
122
+ thinkingPreview: "",
123
+ status: { ...state.status, activity: "responding" },
124
+ items,
125
+ };
126
+ }
127
+ 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
+ });
146
+ }
147
+ return { ...state, thinkingPreview: "", items };
148
+ }
149
+ case "notice":
150
+ return {
151
+ ...state,
152
+ items: [
153
+ ...state.items,
154
+ {
155
+ kind: "notice",
156
+ id: nextId("notice"),
157
+ level: event.level,
158
+ text: event.text,
159
+ done: true,
160
+ },
161
+ ],
162
+ };
163
+ case "tool-call":
164
+ return {
165
+ ...state,
166
+ status: { ...state.status, activity: event.name },
167
+ items: [
168
+ ...state.items,
169
+ {
170
+ kind: "tool",
171
+ id: event.id,
172
+ name: event.name,
173
+ argsDisplay: event.argsDisplay,
174
+ output: "",
175
+ status: "running",
176
+ done: false,
177
+ },
178
+ ],
179
+ };
180
+ case "tool-output": {
181
+ const items = state.items.map((item) => item.kind === "tool" && item.id === event.id
182
+ ? { ...item, output: capOutput(item.output + event.chunk) }
183
+ : item);
184
+ return { ...state, items };
185
+ }
186
+ case "tool-result": {
187
+ const items = state.items.map((item) => item.kind === "tool" && item.id === event.id
188
+ ? {
189
+ ...item,
190
+ status: (event.ok ? "ok" : "fail"),
191
+ exitCode: event.exitCode,
192
+ summary: event.summary,
193
+ artifactPath: event.artifactPath,
194
+ done: true,
195
+ }
196
+ : item);
197
+ return { ...state, items };
198
+ }
199
+ case "tool-blocked": {
200
+ const existing = state.items.find((item) => item.kind === "tool" && item.id === event.id);
201
+ if (existing) {
202
+ const items = state.items.map((item) => item.kind === "tool" && item.id === event.id
203
+ ? {
204
+ ...item,
205
+ status: "blocked",
206
+ summary: event.reason,
207
+ done: true,
208
+ }
209
+ : item);
210
+ return { ...state, items };
211
+ }
212
+ return {
213
+ ...state,
214
+ items: [
215
+ ...state.items,
216
+ {
217
+ kind: "tool",
218
+ id: event.id,
219
+ name: event.name,
220
+ argsDisplay: "",
221
+ output: "",
222
+ status: "blocked",
223
+ summary: event.reason,
224
+ done: true,
225
+ },
226
+ ],
227
+ };
228
+ }
229
+ case "plan-update": {
230
+ const idx = state.items.findIndex((item) => item.kind === "plan" && !item.done);
231
+ if (idx >= 0) {
232
+ const items = [...state.items];
233
+ items[idx] = { ...items[idx], plan: event.plan };
234
+ return { ...state, items };
235
+ }
236
+ return {
237
+ ...state,
238
+ items: [
239
+ ...state.items,
240
+ {
241
+ kind: "plan",
242
+ id: nextId("plan"),
243
+ plan: event.plan,
244
+ done: false,
245
+ },
246
+ ],
247
+ };
248
+ }
249
+ case "confirm-request":
250
+ return {
251
+ ...state,
252
+ pendingConfirm: {
253
+ id: event.id,
254
+ kind: event.kind,
255
+ prompt: event.prompt,
256
+ },
257
+ };
258
+ case "turn-end":
259
+ case "turn-aborted":
260
+ case "turn-error": {
261
+ const items = state.items.map((item) => item.done ? item : { ...item, done: true, streaming: false });
262
+ if (event.type === "turn-aborted") {
263
+ items.push({
264
+ kind: "notice",
265
+ id: nextId("notice"),
266
+ level: "warn",
267
+ text: "Turn aborted.",
268
+ done: true,
269
+ });
270
+ }
271
+ else if (event.type === "turn-error") {
272
+ items.push({
273
+ kind: "notice",
274
+ id: nextId("notice"),
275
+ level: "warn",
276
+ text: event.message,
277
+ done: true,
278
+ });
279
+ }
280
+ return {
281
+ ...state,
282
+ items,
283
+ thinkingPreview: "",
284
+ pendingConfirm: undefined,
285
+ status: { running: false, activity: "", step: 0, startedAt: undefined },
286
+ };
287
+ }
288
+ }
289
+ }
290
+ // ── Helpers ──────────────────────────────────────────────────────────────────
291
+ const TOOL_OUTPUT_CAP = 8000;
292
+ function capOutput(text) {
293
+ if (text.length <= TOOL_OUTPUT_CAP)
294
+ return text;
295
+ return `…${text.slice(text.length - TOOL_OUTPUT_CAP)}`;
296
+ }
297
+ const PREVIEW_CAP = 400;
298
+ function tailPreview(text) {
299
+ const collapsed = text.replace(/\s+/g, " ");
300
+ if (collapsed.length <= PREVIEW_CAP)
301
+ return collapsed;
302
+ return `…${collapsed.slice(collapsed.length - PREVIEW_CAP)}`;
303
+ }
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
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/tui/state.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -2,7 +2,7 @@ export declare const providerIds: readonly ["groq", "gemini", "openrouter", "ope
2
2
  export type ProviderId = (typeof providerIds)[number];
3
3
  export type Mode = "ask" | "agent";
4
4
  export type RiskLevel = "safe" | "confirm" | "block";
5
- export type ReasoningEffort = "low" | "medium" | "high";
5
+ export type ReasoningEffort = "none" | "minimal" | "low" | "medium" | "high" | "xhigh";
6
6
  export interface ReasoningPreference {
7
7
  enabled: boolean;
8
8
  effort: ReasoningEffort;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pentoshi/clai",
3
- "version": "1.2.6",
3
+ "version": "1.2.7",
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",
@@ -49,7 +49,9 @@
49
49
  "cheerio": "^1.0.0",
50
50
  "commander": "^14.0.3",
51
51
  "conf": "^13.1.0",
52
- "execa": "^9.5.2"
52
+ "execa": "^9.5.2",
53
+ "ink": "^5.2.1",
54
+ "react": "^18.3.1"
53
55
  },
54
56
  "optionalDependencies": {
55
57
  "@napi-rs/keyring": "^1.3.0"
@@ -59,6 +61,7 @@
59
61
  },
60
62
  "devDependencies": {
61
63
  "@types/node": "^25.6.0",
64
+ "@types/react": "^18.3.31",
62
65
  "fast-check": "^4.3.0",
63
66
  "tsx": "^4.21.0",
64
67
  "typescript": "^6.0.3",