File size: 2,309 Bytes
f59fbe2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import type { ToolInputDisplay } from "@moonshot-ai/kimi-code-sdk";

import type { DisplayBlock } from "../../shared/legacy-sdk";

export function describeToolDisplay(display: ToolInputDisplay): string {
  switch (display.kind) {
    case "command":
      return display.command;
    case "file_io":
      return `${display.operation} ${display.path}`;
    case "diff":
      return `Edit ${display.path}`;
    case "search":
      return `Search for ${display.query}`;
    case "url_fetch":
      return display.url;
    case "agent_call":
      return display.prompt;
    case "skill_call":
      return display.args ? `${display.skill_name} ${display.args}` : display.skill_name;
    case "todo_list":
      return "Update the task list";
    case "task":
      return display.description;
    case "task_stop":
      return display.task_description;
    case "plan_review":
      return display.plan;
    case "goal_start":
      return display.objective;
    case "generic":
      return display.summary;
  }
}

export function toLegacyDisplay(display: ToolInputDisplay): DisplayBlock[] {
  switch (display.kind) {
    case "command":
      return [{ type: "shell", language: display.language ?? "bash", command: display.command }];
    case "diff":
      return [{ type: "diff", path: display.path, old_text: display.before, new_text: display.after }];
    case "file_io":
      if (
        display.before !== undefined ||
        display.after !== undefined ||
        display.content !== undefined
      ) {
        return [{
          type: "diff",
          path: display.path,
          old_text: display.before ?? "",
          new_text: display.after ?? display.content ?? "",
        }];
      }
      return [{ type: "brief", text: describeToolDisplay(display) }];
    case "todo_list":
      return [{
        type: "todo",
        items: display.items.map((item) => ({
          title: item.title,
          status: item.status === "done" || item.status === "in_progress" ? item.status : "pending",
        })),
      }];
    case "search":
    case "url_fetch":
    case "agent_call":
    case "skill_call":
    case "task":
    case "task_stop":
    case "plan_review":
    case "goal_start":
    case "generic":
      return [{ type: "brief", text: describeToolDisplay(display) }];
  }
}