@pentoshi/clai 0.6.0 → 0.7.2

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 (119) hide show
  1. package/README.md +18 -15
  2. package/dist/agent/context-manager.d.ts +27 -0
  3. package/dist/agent/context-manager.js +75 -0
  4. package/dist/agent/context-manager.js.map +1 -0
  5. package/dist/agent/runner.d.ts +21 -1
  6. package/dist/agent/runner.js +185 -74
  7. package/dist/agent/runner.js.map +1 -1
  8. package/dist/commands/doctor.js +21 -2
  9. package/dist/commands/doctor.js.map +1 -1
  10. package/dist/commands/update.js +11 -2
  11. package/dist/commands/update.js.map +1 -1
  12. package/dist/index.js +172 -5
  13. package/dist/index.js.map +1 -1
  14. package/dist/llm/anthropic.js +29 -38
  15. package/dist/llm/anthropic.js.map +1 -1
  16. package/dist/llm/gemini.d.ts +2 -0
  17. package/dist/llm/gemini.js +40 -43
  18. package/dist/llm/gemini.js.map +1 -1
  19. package/dist/llm/http.d.ts +23 -1
  20. package/dist/llm/http.js +197 -13
  21. package/dist/llm/http.js.map +1 -1
  22. package/dist/llm/nvidia.js +1 -0
  23. package/dist/llm/nvidia.js.map +1 -1
  24. package/dist/llm/ollama.js +18 -27
  25. package/dist/llm/ollama.js.map +1 -1
  26. package/dist/llm/router.d.ts +7 -0
  27. package/dist/llm/router.js +16 -23
  28. package/dist/llm/router.js.map +1 -1
  29. package/dist/modes/agent.d.ts +4 -2
  30. package/dist/modes/agent.js +2 -2
  31. package/dist/modes/agent.js.map +1 -1
  32. package/dist/modes/ask.js +3 -4
  33. package/dist/modes/ask.js.map +1 -1
  34. package/dist/os/pkgmgr.d.ts +7 -1
  35. package/dist/os/pkgmgr.js +97 -18
  36. package/dist/os/pkgmgr.js.map +1 -1
  37. package/dist/prompts/index.d.ts +7 -0
  38. package/dist/prompts/index.js +12 -4
  39. package/dist/prompts/index.js.map +1 -1
  40. package/dist/repl.d.ts +1 -0
  41. package/dist/repl.js +363 -45
  42. package/dist/repl.js.map +1 -1
  43. package/dist/safety/classifier.d.ts +7 -1
  44. package/dist/safety/classifier.js +260 -86
  45. package/dist/safety/classifier.js.map +1 -1
  46. package/dist/safety/patterns.d.ts +48 -1
  47. package/dist/safety/patterns.js +140 -7
  48. package/dist/safety/patterns.js.map +1 -1
  49. package/dist/store/config.d.ts +23 -3
  50. package/dist/store/config.js +31 -11
  51. package/dist/store/config.js.map +1 -1
  52. package/dist/store/history.d.ts +9 -0
  53. package/dist/store/history.js +58 -1
  54. package/dist/store/history.js.map +1 -1
  55. package/dist/store/keys.d.ts +2 -1
  56. package/dist/store/keys.js +7 -3
  57. package/dist/store/keys.js.map +1 -1
  58. package/dist/store/logs.d.ts +7 -0
  59. package/dist/store/logs.js +39 -1
  60. package/dist/store/logs.js.map +1 -1
  61. package/dist/store/project.d.ts +1 -0
  62. package/dist/store/project.js +34 -9
  63. package/dist/store/project.js.map +1 -1
  64. package/dist/store/scope.d.ts +32 -0
  65. package/dist/store/scope.js +161 -0
  66. package/dist/store/scope.js.map +1 -0
  67. package/dist/tools/fs.d.ts +6 -2
  68. package/dist/tools/fs.js +99 -87
  69. package/dist/tools/fs.js.map +1 -1
  70. package/dist/tools/http.d.ts +5 -3
  71. package/dist/tools/http.js +170 -31
  72. package/dist/tools/http.js.map +1 -1
  73. package/dist/tools/policies/output-policy.d.ts +13 -0
  74. package/dist/tools/policies/output-policy.js +56 -0
  75. package/dist/tools/policies/output-policy.js.map +1 -0
  76. package/dist/tools/reducers/ffuf.d.ts +6 -0
  77. package/dist/tools/reducers/ffuf.js +74 -0
  78. package/dist/tools/reducers/ffuf.js.map +1 -0
  79. package/dist/tools/reducers/generic.d.ts +2 -0
  80. package/dist/tools/reducers/generic.js +60 -0
  81. package/dist/tools/reducers/generic.js.map +1 -0
  82. package/dist/tools/reducers/gobuster.d.ts +2 -0
  83. package/dist/tools/reducers/gobuster.js +36 -0
  84. package/dist/tools/reducers/gobuster.js.map +1 -0
  85. package/dist/tools/reducers/httpx.d.ts +2 -0
  86. package/dist/tools/reducers/httpx.js +38 -0
  87. package/dist/tools/reducers/httpx.js.map +1 -0
  88. package/dist/tools/reducers/nmap.d.ts +7 -0
  89. package/dist/tools/reducers/nmap.js +82 -0
  90. package/dist/tools/reducers/nmap.js.map +1 -0
  91. package/dist/tools/reducers/nuclei.d.ts +2 -0
  92. package/dist/tools/reducers/nuclei.js +51 -0
  93. package/dist/tools/reducers/nuclei.js.map +1 -0
  94. package/dist/tools/reducers/sqlmap.d.ts +2 -0
  95. package/dist/tools/reducers/sqlmap.js +39 -0
  96. package/dist/tools/reducers/sqlmap.js.map +1 -0
  97. package/dist/tools/reducers/subdomains.d.ts +6 -0
  98. package/dist/tools/reducers/subdomains.js +31 -0
  99. package/dist/tools/reducers/subdomains.js.map +1 -0
  100. package/dist/tools/reducers/types.d.ts +14 -0
  101. package/dist/tools/reducers/types.js +2 -0
  102. package/dist/tools/reducers/types.js.map +1 -0
  103. package/dist/tools/registry.d.ts +1 -1
  104. package/dist/tools/registry.js +223 -79
  105. package/dist/tools/registry.js.map +1 -1
  106. package/dist/tools/shell.d.ts +45 -4
  107. package/dist/tools/shell.js +419 -88
  108. package/dist/tools/shell.js.map +1 -1
  109. package/dist/tools/validate.d.ts +37 -0
  110. package/dist/tools/validate.js +144 -0
  111. package/dist/tools/validate.js.map +1 -0
  112. package/dist/types.d.ts +7 -15
  113. package/dist/ui/keys.d.ts +21 -0
  114. package/dist/ui/keys.js +13 -0
  115. package/dist/ui/keys.js.map +1 -0
  116. package/dist/ui/output-pane.d.ts +31 -0
  117. package/dist/ui/output-pane.js +81 -0
  118. package/dist/ui/output-pane.js.map +1 -0
  119. package/package.json +1 -1
@@ -1,19 +1,29 @@
1
1
  import { confirm } from "@inquirer/prompts";
2
2
  import chalk from "chalk";
3
+ import { mkdir, writeFile } from "node:fs/promises";
4
+ import { homedir } from "node:os";
5
+ import { join } from "node:path";
3
6
  import { streamWithProvider } from "../llm/router.js";
4
7
  import { renderAgentSystemPrompt } from "../prompts/index.js";
5
- import { getConfig, updateConfig } from "../store/config.js";
6
- import { classifyToolCall, isPentestToolCall } from "../safety/classifier.js";
8
+ import { getConfig } from "../store/config.js";
9
+ import { classifyToolCall, isPentestToolCall, scopeHint, scopeTargetForToolCall, } from "../safety/classifier.js";
7
10
  import { availableToolNames, runToolCall } from "../tools/registry.js";
11
+ import { reduceToolOutput } from "../tools/policies/output-policy.js";
12
+ import { formatViewportHint, registerViewport } from "../ui/output-pane.js";
13
+ import { compactMessages, estimateMessagesTokens } from "./context-manager.js";
8
14
  import { auditLog } from "../store/logs.js";
9
15
  import { loadProjectContext } from "../store/project.js";
16
+ import { loadScope, isScopeActive, targetInScope, } from "../store/scope.js";
10
17
  import { ensureProviderConfigured } from "../commands/providers.js";
11
- import { rememberThinkingFromText, renderThinkingSummary } from "../ui/thinking.js";
18
+ import { rememberThinkingFromText, renderThinkingSummary, } from "../ui/thinking.js";
12
19
  import { renderMarkdown } from "../ui/markdown.js";
13
20
  import { startThinkingSpinner } from "../ui/spinner.js";
14
- import { writeArtifact } from "../tools/artifacts.js";
15
- import { createToolLivePane, hasToolOutputSnapshot, rememberToolOutput, renderToolOutputHint, updateLastToolSummary, } from "../ui/tool-output.js";
16
- import { compactMessagesForModel, wrapUntrustedContext } from "../context/manager.js";
21
+ export function createSessionPolicy() {
22
+ return {
23
+ allow: new Set(),
24
+ pentestAuthorized: { value: false },
25
+ };
26
+ }
17
27
  function tryParseCall(raw) {
18
28
  try {
19
29
  const parsed = JSON.parse(raw.trim());
@@ -72,7 +82,7 @@ function stripSentinelTokens(text) {
72
82
  .replace(/<\|tool_[a-z_]*\|>/gi, "")
73
83
  .trim();
74
84
  }
75
- export function parseToolCall(text) {
85
+ export function parseToolCall(text, options = {}) {
76
86
  // 1. ```tool ... ``` (standard format)
77
87
  const fenced = text.match(/```tool\s*\n?([\s\S]*?)```/i);
78
88
  if (fenced?.[1]) {
@@ -80,12 +90,50 @@ export function parseToolCall(text) {
80
90
  if (call)
81
91
  return call;
82
92
  }
83
- // 2. Kimi/Moonshot sentinel format (used by kimi-k2 family on NIM).
84
- // Keep this provider-specific compatibility path, but reject generic JSON
85
- // examples/headings/trailing objects so explanatory prose never executes.
93
+ // 2. <tool_call>...</tool_call>
94
+ const xml = text.match(/<tool_call>([\s\S]*?)<\/tool_call>/i);
95
+ if (xml?.[1]) {
96
+ const call = tryParseCall(xml[1]);
97
+ if (call)
98
+ return call;
99
+ }
100
+ // 3. Kimi/Moonshot sentinel format (used by kimi-k2 family on NIM).
86
101
  const kimi = parseKimiToolCall(text);
87
102
  if (kimi)
88
103
  return kimi;
104
+ // In strict mode, stop here. Headings, generic fenced blocks, and trailing
105
+ // JSON are too easy to accidentally trigger when the model is showing a
106
+ // worked example.
107
+ if (options.strict)
108
+ return undefined;
109
+ // 4. ### tool / ## tool / # tool heading + JSON
110
+ const heading = text.match(/#{1,3}\s*tool\s*\n\s*(\{[\s\S]*\})/i);
111
+ if (heading?.[1]) {
112
+ const call = tryParseCall(heading[1]);
113
+ if (call)
114
+ return call;
115
+ }
116
+ // 5. **tool** heading + JSON
117
+ const bold = text.match(/\*\*tool\*\*\s*\n\s*(\{[\s\S]*\})/i);
118
+ if (bold?.[1]) {
119
+ const call = tryParseCall(bold[1]);
120
+ if (call)
121
+ return call;
122
+ }
123
+ // 6. Any fenced block (```json, ```, etc.) containing name+args
124
+ const anyFenced = text.match(/```\w*\s*\n?([\s\S]*?)```/);
125
+ if (anyFenced?.[1]) {
126
+ const call = tryParseCall(anyFenced[1]);
127
+ if (call)
128
+ return call;
129
+ }
130
+ // 7. Trailing JSON object with "name" and "args"
131
+ const trailingJson = text.match(/(\{"name"\s*:\s*"[^"]+"\s*,\s*"args"\s*:\s*\{[\s\S]*?\}\s*\})\s*$/);
132
+ if (trailingJson?.[1]) {
133
+ const call = tryParseCall(trailingJson[1]);
134
+ if (call)
135
+ return call;
136
+ }
89
137
  return undefined;
90
138
  }
91
139
  /** Extract the text before the tool call block for display purposes */
@@ -130,32 +178,31 @@ function formatToolArgs(call) {
130
178
  return JSON.stringify(call.args);
131
179
  }
132
180
  function isAbortError(error, signal) {
133
- return Boolean(signal?.aborted) || (error instanceof Error && error.name === "AbortError");
181
+ return (Boolean(signal?.aborted) ||
182
+ (error instanceof Error && error.name === "AbortError"));
183
+ }
184
+ function safeArtifactName(name) {
185
+ return (name.replace(/[^a-z0-9_.-]+/gi, "-").replace(/^-+|-+$/g, "") ||
186
+ "tool-output");
134
187
  }
135
188
  async function saveToolOutput(call, output) {
136
189
  if (!output.trim())
137
190
  return undefined;
138
- return writeArtifact(call.name, output);
191
+ const dir = join(homedir(), ".clai", "outputs");
192
+ await mkdir(dir, { recursive: true });
193
+ const stamp = new Date().toISOString().replace(/[:.]/g, "-");
194
+ const path = join(dir, `${stamp}-${safeArtifactName(call.name)}.txt`);
195
+ await writeFile(path, `${output}\n`, "utf8");
196
+ return path;
139
197
  }
140
198
  function summarizeOutput(output, maxChars = 8_000) {
141
199
  if (output.length <= maxChars)
142
200
  return { text: output, truncated: false };
143
201
  const lines = output.split(/\r?\n/);
144
- const signalLines = lines.filter((line) => /\b(open|vulnerable|critical|high|medium|found|success|injectable|CVE-\d{4}-\d+|200|201|204|301|302|307|308|401|403|500|error|failed)\b/i.test(line));
145
202
  const head = [];
146
203
  const tail = [];
147
204
  let used = 0;
148
- const signalBudget = Math.floor(maxChars * 0.45);
149
- const half = Math.floor((maxChars - signalBudget) / 2);
150
- const signals = [];
151
- for (const line of signalLines) {
152
- const cost = line.length + 1;
153
- if (used + cost > signalBudget)
154
- break;
155
- signals.push(line);
156
- used += cost;
157
- }
158
- used = 0;
205
+ const half = Math.floor(maxChars / 2);
159
206
  for (const line of lines) {
160
207
  const cost = line.length + 1;
161
208
  if (used + cost > half)
@@ -175,40 +222,71 @@ function summarizeOutput(output, maxChars = 8_000) {
175
222
  return {
176
223
  text: [
177
224
  ...head,
178
- ...(signals.length > 0
179
- ? [`... high-signal lines from omitted output ...`, ...signals]
180
- : []),
181
225
  `... (${lines.length.toLocaleString()} output lines truncated) ...`,
182
226
  ...tail,
183
227
  ].join("\n"),
184
228
  truncated: true,
185
229
  };
186
230
  }
187
- function formatToolContext(result) {
188
- const output = (result.modelContext ?? result.summary ?? result.output).trim();
189
- const summary = summarizeOutput(output, 8_000);
190
- const saved = result.outputPath ? `\nFull output saved to: ${result.outputPath}` : "";
231
+ function formatToolContext(call, result) {
232
+ const output = result.output.trim();
233
+ if (!output)
234
+ return "";
235
+ let reduced;
236
+ try {
237
+ const command = call.name === "shell.exec" ? String(call.args.command ?? "") : call.name;
238
+ const policy = reduceToolOutput(output, {
239
+ toolName: call.name,
240
+ command,
241
+ });
242
+ reduced = policy.summary.trim();
243
+ }
244
+ catch {
245
+ reduced = undefined;
246
+ }
247
+ // Hard cap on the reduced text — reducers should already be small, but
248
+ // never let one accidentally explode model context.
249
+ const base = reduced && reduced.length > 0 ? reduced : output;
250
+ const summary = summarizeOutput(base, 8_000);
251
+ const saved = result.outputPath
252
+ ? `\nFull output saved to: ${result.outputPath}`
253
+ : "";
191
254
  return `${summary.text}${saved}`.trim();
192
255
  }
193
- async function ensurePentestAuthorization(call, autoConfirm) {
194
- const config = getConfig();
195
- if (!isPentestToolCall(call) || config.pentestAuthorized)
256
+ async function ensurePentestAuthorization(call, autoConfirm, session) {
257
+ if (!isPentestToolCall(call))
258
+ return true;
259
+ // Persistent auth (via `clai authorize-pentest AGREE`) wins.
260
+ if (getConfig().pentestAuthorized)
261
+ return true;
262
+ // Session auth flipped earlier in this session — no re-prompt.
263
+ if (session.pentestAuthorized.value)
196
264
  return true;
197
265
  if (autoConfirm) {
266
+ // -y is session-scoped only. We do NOT touch the persistent config so
267
+ // a one-shot `-y` cannot silently authorize later interactive runs.
268
+ session.pentestAuthorized.value = true;
198
269
  return true;
199
270
  }
200
271
  const ok = await confirm({
201
- message: chalk.red("clai only assists with security testing on systems you own or have written permission to test. Confirm?"),
272
+ message: chalk.red("clai only assists with security testing on systems you own or have written permission to test. Confirm for this session?"),
202
273
  default: false,
203
274
  });
204
275
  if (!ok)
205
276
  return false;
206
- updateConfig({ pentestAuthorized: true });
277
+ session.pentestAuthorized.value = true;
207
278
  return true;
208
279
  }
209
- async function confirmToolExecution(call, autoConfirm) {
280
+ async function confirmToolExecution(call, autoConfirm, session) {
210
281
  const config = getConfig();
211
- if (autoConfirm || config.allowAlwaysTools.includes(call.name))
282
+ if (autoConfirm)
283
+ return true;
284
+ if (session.allow.has(call.name))
285
+ return true;
286
+ // Persistent allowlist kept for backwards compat with users who set it
287
+ // through `clai config` directly, but `/allow` only mutates the session
288
+ // set so authorizations never leak across processes.
289
+ if (config.allowAlwaysTools.includes(call.name))
212
290
  return true;
213
291
  return confirm({
214
292
  message: chalk.yellow(` run ${call.name}: ${formatToolArgs(call)}?`),
@@ -221,7 +299,7 @@ export async function runAgentLoop(prompt, options = {}) {
221
299
  const projectContext = await loadProjectContext();
222
300
  const systemPrompt = renderAgentSystemPrompt(availableToolNames().join(", "));
223
301
  const fullSystemPrompt = projectContext
224
- ? `${systemPrompt}\n\n${wrapUntrustedContext("Project context from .clai/context.md", projectContext)}`
302
+ ? `${systemPrompt}\n\nProject context from .clai/context.md:\n${projectContext}`
225
303
  : systemPrompt;
226
304
  const messages = [
227
305
  { role: "system", content: fullSystemPrompt },
@@ -232,6 +310,7 @@ export async function runAgentLoop(prompt, options = {}) {
232
310
  await ensureProviderConfigured(provider);
233
311
  let model = options.model ?? config.defaultModel;
234
312
  let lastAnswer = "";
313
+ const session = options.session ?? createSessionPolicy();
235
314
  for (let step = 0; step < maxSteps; step += 1) {
236
315
  options.signal?.throwIfAborted();
237
316
  // Buffer LLM output so tool JSON and hidden thinking are not printed raw.
@@ -245,7 +324,7 @@ export async function runAgentLoop(prompt, options = {}) {
245
324
  completion = await streamWithProvider({
246
325
  provider,
247
326
  model,
248
- messages: compactMessagesForModel(messages),
327
+ messages,
249
328
  temperature: 0.2,
250
329
  // Reasoning models can spend a lot on hidden thinking; give
251
330
  // them headroom so the visible answer / tool call isn't
@@ -283,7 +362,9 @@ export async function runAgentLoop(prompt, options = {}) {
283
362
  provider = completion.provider;
284
363
  model = completion.model;
285
364
  const assistantText = rememberThinkingFromText(completion.text);
286
- const call = parseToolCall(assistantText.visible);
365
+ const call = parseToolCall(assistantText.visible, {
366
+ strict: getConfig().parserStrict,
367
+ });
287
368
  if (!call) {
288
369
  // Detect the case where the model emitted sentinel-style tool-call
289
370
  // markers but the body was malformed or truncated. Printing those
@@ -309,10 +390,6 @@ export async function runAgentLoop(prompt, options = {}) {
309
390
  if (!cleaned.endsWith("\n"))
310
391
  process.stdout.write("\n");
311
392
  }
312
- updateLastToolSummary(cleaned);
313
- if (hasToolOutputSnapshot()) {
314
- process.stdout.write(`${renderToolOutputHint()}\n`);
315
- }
316
393
  if (assistantText.hasThinking) {
317
394
  process.stdout.write(`${renderThinkingSummary(assistantText.thinkContent)}\n`);
318
395
  }
@@ -329,10 +406,22 @@ export async function runAgentLoop(prompt, options = {}) {
329
406
  process.stdout.write(`${renderThinkingSummary(assistantText.thinkContent)}\n`);
330
407
  }
331
408
  messages.push({ role: "assistant", content: assistantText.visible });
332
- const decision = classifyToolCall(call);
333
- await auditLog("tool.classified", { call, decision });
409
+ const scope = await loadScope();
410
+ const decision = classifyToolCall(call, { scope });
411
+ await auditLog("tool.classified", {
412
+ call,
413
+ decision,
414
+ scope: isScopeActive(scope) ? scope.name ?? "(unnamed)" : "(none)",
415
+ });
334
416
  // Show tool call
335
- process.stdout.write(chalk.cyan(` ▶ ${call.name}`) + chalk.gray(` ${formatToolArgs(call)}`) + "\n");
417
+ process.stdout.write(chalk.cyan(` ▶ ${call.name}`) +
418
+ chalk.gray(` ${formatToolArgs(call)}`) +
419
+ "\n");
420
+ const scopeTarget = scopeTargetForToolCall(call);
421
+ if (scopeTarget &&
422
+ (!isScopeActive(scope) || !targetInScope(scopeTarget, scope))) {
423
+ process.stdout.write(chalk.dim(` scope optional: ${scopeHint(scopeTarget)}\n`));
424
+ }
336
425
  if (decision.level === "block") {
337
426
  process.stdout.write(chalk.red(` ✗ blocked: ${decision.reason}`) + "\n");
338
427
  lastAnswer = `Blocked: ${call.name} — ${decision.reason}`;
@@ -340,8 +429,10 @@ export async function runAgentLoop(prompt, options = {}) {
340
429
  }
341
430
  // Pentest authorization — if user confirms this, skip the per-tool confirm
342
431
  let pentestJustConfirmed = false;
343
- const needsPentestAuth = isPentestToolCall(call) && !getConfig().pentestAuthorized;
344
- const authorized = await ensurePentestAuthorization(call, Boolean(options.autoConfirm));
432
+ const needsPentestAuth = isPentestToolCall(call) &&
433
+ !getConfig().pentestAuthorized &&
434
+ !session.pentestAuthorized.value;
435
+ const authorized = await ensurePentestAuthorization(call, Boolean(options.autoConfirm), session);
345
436
  if (!authorized) {
346
437
  lastAnswer = "Pentest authorization not confirmed.";
347
438
  process.stdout.write(chalk.red(` ✗ ${lastAnswer}`) + "\n");
@@ -352,7 +443,7 @@ export async function runAgentLoop(prompt, options = {}) {
352
443
  }
353
444
  // Confirm if needed (safe tools auto-execute, pentest-auth'd tools skip)
354
445
  if (decision.level === "confirm" && !pentestJustConfirmed) {
355
- const ok = await confirmToolExecution(call, Boolean(options.autoConfirm));
446
+ const ok = await confirmToolExecution(call, Boolean(options.autoConfirm), session);
356
447
  if (!ok) {
357
448
  lastAnswer = "Cancelled.";
358
449
  process.stdout.write(chalk.yellow(` ✗ cancelled`) + "\n");
@@ -366,12 +457,13 @@ export async function runAgentLoop(prompt, options = {}) {
366
457
  let liveBytes = 0;
367
458
  const liveCap = 16_000; // Stop streaming after this many bytes to avoid flooding the terminal.
368
459
  let liveTruncatedNotified = false;
369
- const livePane = createToolLivePane(formatToolArgs(call));
370
460
  const printLive = (chunk) => {
371
461
  // Suppress live preview for fs.read / fs.list — those are read-only
372
462
  // and the final summary is already concise. Stream shell-style tools
373
463
  // (shell.exec, net.scan, pentest.recon, pkg.install).
374
- if (call.name === "fs.read" || call.name === "fs.list" || call.name === "fs.search")
464
+ if (call.name === "fs.read" ||
465
+ call.name === "fs.list" ||
466
+ call.name === "fs.search")
375
467
  return;
376
468
  if (liveBytes >= liveCap) {
377
469
  if (!liveTruncatedNotified) {
@@ -383,7 +475,11 @@ export async function runAgentLoop(prompt, options = {}) {
383
475
  const remaining = liveCap - liveBytes;
384
476
  const slice = chunk.length > remaining ? chunk.slice(0, remaining) : chunk;
385
477
  liveBytes += slice.length;
386
- livePane.append(slice);
478
+ // Indent each line so live output lines up under the tool call.
479
+ const indented = slice.replace(/\r/g, "").replace(/\n(?!$)/g, "\n ");
480
+ process.stdout.write(chalk.dim(indented.startsWith("\n")
481
+ ? indented
482
+ : ` ${indented}`.replace(/^ /, " ")));
387
483
  };
388
484
  try {
389
485
  result = await runToolCall(call, {
@@ -395,10 +491,10 @@ export async function runAgentLoop(prompt, options = {}) {
395
491
  },
396
492
  });
397
493
  // Newline separator if live output didn't already end with one.
398
- livePane.finish();
494
+ if (liveBytes > 0)
495
+ process.stdout.write("\n");
399
496
  }
400
497
  catch (toolError) {
401
- livePane.finish();
402
498
  if (isAbortError(toolError, options.signal)) {
403
499
  lastAnswer = "Aborted.";
404
500
  process.stdout.write(chalk.yellow(" ⏹ Aborted.\n"));
@@ -409,26 +505,18 @@ export async function runAgentLoop(prompt, options = {}) {
409
505
  }
410
506
  const output = result.output.trim();
411
507
  const displayMax = 6_000;
412
- const savedOutputPath = result.outputPath ?? (output.length > displayMax
413
- ? await saveToolOutput(call, output)
414
- : undefined);
508
+ // If the tool already produced an artifact (shell.exec now streams to one
509
+ // as it runs), respect that path. Otherwise, fall back to the post-hoc
510
+ // save for tools that return their full output in memory.
511
+ const savedOutputPath = result.outputPath ??
512
+ (output.length > displayMax
513
+ ? await saveToolOutput(call, output)
514
+ : undefined);
415
515
  const resultWithArtifact = {
416
516
  ...result,
417
517
  outputPath: savedOutputPath,
418
- truncated: result.truncated || Boolean(savedOutputPath),
419
- artifacts: result.artifacts ?? (savedOutputPath
420
- ? [{ path: savedOutputPath, kind: "raw", redacted: true }]
421
- : undefined),
518
+ truncated: result.truncated ?? Boolean(savedOutputPath),
422
519
  };
423
- if (output || savedOutputPath) {
424
- rememberToolOutput({
425
- id: `${Date.now()}-${step}`,
426
- label: `${call.name} ${formatToolArgs(call)}`.trim(),
427
- artifactPath: savedOutputPath,
428
- fullText: savedOutputPath ? undefined : output,
429
- summary: result.summary ?? result.modelContext,
430
- });
431
- }
432
520
  options.onToolResult?.(call, resultWithArtifact);
433
521
  await auditLog("tool.result", {
434
522
  call,
@@ -446,7 +534,7 @@ export async function runAgentLoop(prompt, options = {}) {
446
534
  : displaySummary.text;
447
535
  // If we already streamed live output for this call, skip re-printing
448
536
  // the same bytes. Just note where the full output lives if it was saved.
449
- if (liveBytes > 0 && process.stdout.isTTY) {
537
+ if (liveBytes > 0) {
450
538
  if (savedOutputPath) {
451
539
  process.stdout.write(chalk.dim(` full output saved to ${savedOutputPath}\n`));
452
540
  }
@@ -460,11 +548,34 @@ export async function runAgentLoop(prompt, options = {}) {
460
548
  process.stdout.write(chalk.yellow(" ⏹ Aborted.\n"));
461
549
  return lastAnswer;
462
550
  }
463
- const contextOutput = formatToolContext(resultWithArtifact);
551
+ const contextOutput = formatToolContext(call, resultWithArtifact);
552
+ // Register a collapse/expand viewport so the user can pull the full raw
553
+ // output back with Ctrl+O or `/output last` after the AI summary lands.
554
+ if (output) {
555
+ const viewport = registerViewport({
556
+ toolName: call.name,
557
+ argsDisplay: formatToolArgs(call),
558
+ artifactPath: savedOutputPath,
559
+ summary: contextOutput,
560
+ });
561
+ process.stdout.write(`${formatViewportHint(viewport)}\n`);
562
+ }
464
563
  messages.push({
465
564
  role: "tool",
466
565
  content: `Tool ${call.name} result (exit=${result.exitCode ?? 0}, ok=${result.ok}):\n${contextOutput}`,
467
566
  });
567
+ // Compact older messages when the running estimate exceeds budget so
568
+ // free-tier context windows are not blown by long pentest sessions.
569
+ if (estimateMessagesTokens(messages) > 24_000) {
570
+ const compacted = compactMessages(messages);
571
+ if (compacted.length < messages.length) {
572
+ messages.splice(0, messages.length, ...compacted);
573
+ await auditLog("agent.compact", {
574
+ newLength: messages.length,
575
+ estimatedTokens: estimateMessagesTokens(messages),
576
+ });
577
+ }
578
+ }
468
579
  }
469
580
  lastAnswer = `Stopped after ${maxSteps} steps.`;
470
581
  process.stdout.write(chalk.yellow(lastAnswer) + "\n");
@@ -1 +1 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/agent/runner.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,10 @@
1
1
  import chalk from 'chalk';
2
2
  import { commandAvailable, detectPackageManager } from '../os/pkgmgr.js';
3
3
  import { detectSystem } from '../os/detect.js';
4
- import { getConfigPath } from '../store/config.js';
4
+ import { getConfig, getConfigPath } from '../store/config.js';
5
5
  import { getHistoryPath } from '../store/history.js';
6
6
  import { getFallbackKeysPath, probeKeychain } from '../store/keys.js';
7
+ import { loadScope, isScopeActive, getScopePath } from '../store/scope.js';
7
8
  import { printProviderKeys } from './providers.js';
8
9
  const pentestTools = [
9
10
  'nmap', 'nikto', 'sqlmap', 'gobuster', 'ffuf', 'hydra', 'masscan',
@@ -28,9 +29,27 @@ export async function runDoctor() {
28
29
  ? 'native module not installed'
29
30
  : `runtime error — ${keychain.detail?.split('\n')[0] ?? 'unknown'}`;
30
31
  console.log(`Keychain: ${chalk.yellow('using restricted-permission plaintext file')} ${chalk.dim(`(${reason})`)}`);
31
- console.log(` ${chalk.dim(`→ ${getFallbackKeysPath()}`)}`);
32
+ console.log(` ${chalk.dim(`→ ${getFallbackKeysPath()} (mode 0600, NOT encrypted)`)}`);
32
33
  }
33
34
  console.log(`Package manager: ${pkgmgr.id}`);
35
+ const config = getConfig();
36
+ const offline = process.env.CLAI_OFFLINE === '1' ||
37
+ process.env.CLAI_NO_UPDATE_CHECK === '1' ||
38
+ Boolean(config.offline);
39
+ console.log(`Update check: ${offline ? chalk.yellow('disabled (offline)') : chalk.green('enabled')}`);
40
+ console.log(`Free-only mode: ${config.freeOnly ? chalk.green('on') : chalk.dim('off')} ` +
41
+ `Provider fallback: ${config.providerFallback ? chalk.green('on') : chalk.dim('off')} ` +
42
+ `Private mode: ${config.privateMode ? chalk.green('on') : chalk.dim('off')} ` +
43
+ `Sandbox reads: ${config.sandboxReads === false ? chalk.yellow('off') : chalk.green('on')} ` +
44
+ `Parser strict: ${config.parserStrict ? chalk.green('on') : chalk.dim('off')}`);
45
+ console.log(`History retention: ${config.historyRetentionLimit ? `${config.historyRetentionLimit} sessions` : chalk.yellow('unlimited')}`);
46
+ const scope = await loadScope();
47
+ if (isScopeActive(scope)) {
48
+ console.log(`Engagement scope: ${chalk.green('active')} ${chalk.dim(`(${scope.name ?? 'unnamed'} → ${scope.authorizedTargets.join(', ')})`)}`);
49
+ }
50
+ else {
51
+ console.log(`Engagement scope: ${chalk.dim('none')} ${chalk.dim(`(create at ${getScopePath()})`)}`);
52
+ }
34
53
  console.log('');
35
54
  console.log(chalk.bold('Providers'));
36
55
  await printProviderKeys();
@@ -1 +1 @@
1
- {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  import chalk from "chalk";
2
2
  import { getConfig, updateConfig } from "../store/config.js";
3
3
  const REPO = "pentoshi007/clai";
4
- const CURRENT_VERSION = "0.6.0";
4
+ const CURRENT_VERSION = "0.7.2";
5
5
  const CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours
6
6
  function parseVersion(v) {
7
7
  return v.replace(/^v/, "").split(".").map(Number);
@@ -41,10 +41,19 @@ async function fetchLatestRelease() {
41
41
  return null;
42
42
  }
43
43
  }
44
+ function isUpdateCheckDisabled() {
45
+ if (process.env.CLAI_OFFLINE === "1" ||
46
+ process.env.CLAI_NO_UPDATE_CHECK === "1")
47
+ return true;
48
+ return Boolean(getConfig().offline);
49
+ }
44
50
  /** Non-blocking startup check — prints a notice if a new version exists */
45
51
  export function checkForUpdateSilent() {
52
+ if (isUpdateCheckDisabled())
53
+ return;
46
54
  const config = getConfig();
47
- if (config.lastUpdateCheck && Date.now() - config.lastUpdateCheck < CHECK_INTERVAL_MS)
55
+ if (config.lastUpdateCheck &&
56
+ Date.now() - config.lastUpdateCheck < CHECK_INTERVAL_MS)
48
57
  return;
49
58
  fetchLatestRelease()
50
59
  .then((release) => {