chatccc 0.2.230 → 0.2.232

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.
@@ -17,6 +17,7 @@ export interface CccAdapterOptions extends ChatSessionConfig {
17
17
  contextDir?: string;
18
18
  compactAtTokens?: number;
19
19
  keepRecentMessages?: number;
20
+ compactionTimeoutMs?: number;
20
21
  maxSteps?: number;
21
22
  }
22
23
 
@@ -32,6 +33,7 @@ function toChatSessionOptions(
32
33
  contextDir: options.contextDir,
33
34
  compactAtTokens: options.compactAtTokens,
34
35
  keepRecentMessages: options.keepRecentMessages,
36
+ compactionTimeoutMs: options.compactionTimeoutMs,
35
37
  maxSteps: options.maxSteps,
36
38
  // chatccc 无终端可交互,且对齐 claude/codex 适配器的 bypass 模式:
37
39
  // 高危命令不询问,全部放行(与独立 deepccc CLI 的 ask 模式不同)
@@ -75,7 +77,15 @@ export function createCccAdapter(options: CccAdapterOptions = {}): ToolAdapter {
75
77
  );
76
78
 
77
79
  for await (const event of session.chat(userText, signal)) {
78
- if (event.type === "text") {
80
+ if (event.type === "status") {
81
+ yield {
82
+ type: "assistant",
83
+ blocks: [{
84
+ type: "agent_status",
85
+ status: event.phase === "compacting" ? "compacting" : "responding",
86
+ }],
87
+ };
88
+ } else if (event.type === "text") {
79
89
  yield {
80
90
  type: "assistant",
81
91
  blocks: [{ type: "text", text: event.text }],
@@ -105,6 +105,11 @@ export function updateAgentActivity(
105
105
  if (tracker.activeTools.size > 0) return false;
106
106
 
107
107
  switch (block.type) {
108
+ case "agent_status":
109
+ return setActivity(tracker, {
110
+ kind: block.status === "compacting" ? "compacting" : "responding",
111
+ startedAt: now,
112
+ });
108
113
  case "thinking":
109
114
  case "redacted_thinking":
110
115
  return setActivity(tracker, { kind: "thinking", startedAt: now });
@@ -216,7 +216,12 @@ function writeJsonLine(event: JsonLine): void {
216
216
  }
217
217
 
218
218
  function streamJsonEvent(event: ChatEvent): void {
219
- if (event.type === "text") {
219
+ if (event.type === "status") {
220
+ writeJsonLine({
221
+ type: "status",
222
+ phase: event.phase,
223
+ });
224
+ } else if (event.type === "text") {
220
225
  writeJsonLine({
221
226
  type: "text_delta",
222
227
  text: event.text,
@@ -459,6 +464,12 @@ async function runRepl(args: ParsedArgs): Promise<void> {
459
464
  return;
460
465
  }
461
466
 
467
+ if (input === "/sessions") {
468
+ printSessions();
469
+ rl.prompt();
470
+ return;
471
+ }
472
+
462
473
  currentAbort = new AbortController();
463
474
  const signal = currentAbort.signal;
464
475
 
@@ -484,11 +495,13 @@ async function runRepl(args: ParsedArgs): Promise<void> {
484
495
  for await (const event of session.chat(input, signal)) {
485
496
  if (renderer && view) {
486
497
  view = reduceProgress(view, event);
487
- if (event.type === "text" || event.type === "compact") {
498
+ if (event.type === "text" || event.type === "compact" || event.type === "status") {
488
499
  renderer.render(view);
489
500
  } else {
490
501
  renderer.flush();
491
502
  }
503
+ } else if (event.type === "status") {
504
+ console.log(`${C.dim}[${event.phase === "compacting" ? "compacting context" : "generating reply"}]${C.reset}`);
492
505
  } else if (event.type === "text") {
493
506
  const newText = event.accumulated.slice(lastAccumulated.length);
494
507
  process.stdout.write(newText);