wepscli 0.1.0

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 (130) hide show
  1. package/README.md +293 -0
  2. package/dist/WEPSCLI-shell/agent-runtime.js +824 -0
  3. package/dist/WEPSCLI-shell/agent-runtime.js.map +1 -0
  4. package/dist/WEPSCLI-shell/approval-overlay.js +275 -0
  5. package/dist/WEPSCLI-shell/approval-overlay.js.map +1 -0
  6. package/dist/WEPSCLI-shell/chat-components.js +760 -0
  7. package/dist/WEPSCLI-shell/chat-components.js.map +1 -0
  8. package/dist/WEPSCLI-shell/components.js +850 -0
  9. package/dist/WEPSCLI-shell/components.js.map +1 -0
  10. package/dist/WEPSCLI-shell/config-overlays.js +205 -0
  11. package/dist/WEPSCLI-shell/config-overlays.js.map +1 -0
  12. package/dist/WEPSCLI-shell/debug-log.js +16 -0
  13. package/dist/WEPSCLI-shell/debug-log.js.map +1 -0
  14. package/dist/WEPSCLI-shell/file-change-preview.js +261 -0
  15. package/dist/WEPSCLI-shell/file-change-preview.js.map +1 -0
  16. package/dist/WEPSCLI-shell/helpers.js +112 -0
  17. package/dist/WEPSCLI-shell/helpers.js.map +1 -0
  18. package/dist/WEPSCLI-shell/index.js +3 -0
  19. package/dist/WEPSCLI-shell/index.js.map +1 -0
  20. package/dist/WEPSCLI-shell/provider-add-flow.js +406 -0
  21. package/dist/WEPSCLI-shell/provider-add-flow.js.map +1 -0
  22. package/dist/WEPSCLI-shell/run-wepscli-shell.js +21 -0
  23. package/dist/WEPSCLI-shell/run-wepscli-shell.js.map +1 -0
  24. package/dist/WEPSCLI-shell/runtime-recovery.js +37 -0
  25. package/dist/WEPSCLI-shell/runtime-recovery.js.map +1 -0
  26. package/dist/WEPSCLI-shell/runtime-status.js +66 -0
  27. package/dist/WEPSCLI-shell/runtime-status.js.map +1 -0
  28. package/dist/WEPSCLI-shell/shell-app.js +1047 -0
  29. package/dist/WEPSCLI-shell/shell-app.js.map +1 -0
  30. package/dist/WEPSCLI-shell/shell-modes.js +77 -0
  31. package/dist/WEPSCLI-shell/shell-modes.js.map +1 -0
  32. package/dist/WEPSCLI-shell/slash-commands.js +135 -0
  33. package/dist/WEPSCLI-shell/slash-commands.js.map +1 -0
  34. package/dist/WEPSCLI-shell/theme.js +19 -0
  35. package/dist/WEPSCLI-shell/theme.js.map +1 -0
  36. package/dist/WEPSCLI-shell/tool-approval.js +85 -0
  37. package/dist/WEPSCLI-shell/tool-approval.js.map +1 -0
  38. package/dist/WEPSCLI-shell/tool-diff.js +76 -0
  39. package/dist/WEPSCLI-shell/tool-diff.js.map +1 -0
  40. package/dist/WEPSCLI-shell/tool-file-changes.js +268 -0
  41. package/dist/WEPSCLI-shell/tool-file-changes.js.map +1 -0
  42. package/dist/WEPSCLI-shell/tool-message-detail.js +138 -0
  43. package/dist/WEPSCLI-shell/tool-message-detail.js.map +1 -0
  44. package/dist/WEPSCLI-shell/tool-messages.js +145 -0
  45. package/dist/WEPSCLI-shell/tool-messages.js.map +1 -0
  46. package/dist/WEPSCLI-shell/transcript-panel.js +372 -0
  47. package/dist/WEPSCLI-shell/transcript-panel.js.map +1 -0
  48. package/dist/WEPSCLI-shell/transcript-state.js +62 -0
  49. package/dist/WEPSCLI-shell/transcript-state.js.map +1 -0
  50. package/dist/WEPSCLI-shell/types.js +1 -0
  51. package/dist/WEPSCLI-shell/types.js.map +1 -0
  52. package/dist/cli.js +11 -0
  53. package/dist/cli.js.map +1 -0
  54. package/dist/config.js +40 -0
  55. package/dist/config.js.map +1 -0
  56. package/dist/index.js +4 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/main.js +140 -0
  59. package/dist/main.js.map +1 -0
  60. package/dist/onboarding/action-screen.js +90 -0
  61. package/dist/onboarding/action-screen.js.map +1 -0
  62. package/dist/onboarding/framed-screen.js +35 -0
  63. package/dist/onboarding/framed-screen.js.map +1 -0
  64. package/dist/onboarding/onboarding-app.js +312 -0
  65. package/dist/onboarding/onboarding-app.js.map +1 -0
  66. package/dist/onboarding/run-onboarding.js +23 -0
  67. package/dist/onboarding/run-onboarding.js.map +1 -0
  68. package/dist/onboarding/select-screen.js +21 -0
  69. package/dist/onboarding/select-screen.js.map +1 -0
  70. package/dist/onboarding/summary-screen.js +23 -0
  71. package/dist/onboarding/summary-screen.js.map +1 -0
  72. package/dist/onboarding/text-input-screen.js +55 -0
  73. package/dist/onboarding/text-input-screen.js.map +1 -0
  74. package/dist/onboarding/theme.js +26 -0
  75. package/dist/onboarding/theme.js.map +1 -0
  76. package/dist/provider-profiles/api-key-store.js +51 -0
  77. package/dist/provider-profiles/api-key-store.js.map +1 -0
  78. package/dist/provider-profiles/defaults.js +18 -0
  79. package/dist/provider-profiles/defaults.js.map +1 -0
  80. package/dist/provider-profiles/fetch-models.js +53 -0
  81. package/dist/provider-profiles/fetch-models.js.map +1 -0
  82. package/dist/provider-profiles/index.js +6 -0
  83. package/dist/provider-profiles/index.js.map +1 -0
  84. package/dist/provider-profiles/provider-profile-service.js +223 -0
  85. package/dist/provider-profiles/provider-profile-service.js.map +1 -0
  86. package/dist/provider-profiles/providers-config-store.js +17 -0
  87. package/dist/provider-profiles/providers-config-store.js.map +1 -0
  88. package/dist/provider-profiles/types.js +1 -0
  89. package/dist/provider-profiles/types.js.map +1 -0
  90. package/dist/session-history/session-history-service.js +142 -0
  91. package/dist/session-history/session-history-service.js.map +1 -0
  92. package/dist/shell/animator.js +30 -0
  93. package/dist/shell/animator.js.map +1 -0
  94. package/dist/shell/clickables.js +101 -0
  95. package/dist/shell/clickables.js.map +1 -0
  96. package/dist/shell/dashboard-shell.js +292 -0
  97. package/dist/shell/dashboard-shell.js.map +1 -0
  98. package/dist/shell/index.js +5 -0
  99. package/dist/shell/index.js.map +1 -0
  100. package/dist/shell/keymap.js +14 -0
  101. package/dist/shell/keymap.js.map +1 -0
  102. package/dist/shell/mouse.js +39 -0
  103. package/dist/shell/mouse.js.map +1 -0
  104. package/dist/shell/render.js +122 -0
  105. package/dist/shell/render.js.map +1 -0
  106. package/dist/shell/run-shell.js +36 -0
  107. package/dist/shell/run-shell.js.map +1 -0
  108. package/dist/shell/theme.js +56 -0
  109. package/dist/shell/theme.js.map +1 -0
  110. package/dist/storage/locked-json-file.js +88 -0
  111. package/dist/storage/locked-json-file.js.map +1 -0
  112. package/dist/workbench/animator.js +30 -0
  113. package/dist/workbench/animator.js.map +1 -0
  114. package/dist/workbench/index.js +6 -0
  115. package/dist/workbench/index.js.map +1 -0
  116. package/dist/workbench/mouse.js +39 -0
  117. package/dist/workbench/mouse.js.map +1 -0
  118. package/dist/workbench/render.js +82 -0
  119. package/dist/workbench/render.js.map +1 -0
  120. package/dist/workbench/renderer.js +364 -0
  121. package/dist/workbench/renderer.js.map +1 -0
  122. package/dist/workbench/run-workbench.js +36 -0
  123. package/dist/workbench/run-workbench.js.map +1 -0
  124. package/dist/workbench/theme.js +63 -0
  125. package/dist/workbench/theme.js.map +1 -0
  126. package/dist/workbench/types.js +1 -0
  127. package/dist/workbench/types.js.map +1 -0
  128. package/dist/workbench/workbench-shell.js +649 -0
  129. package/dist/workbench/workbench-shell.js.map +1 -0
  130. package/package.json +65 -0
@@ -0,0 +1,76 @@
1
+ import * as Diff from "diff";
2
+ export function generateDiffString(oldContent, newContent, contextLines = 4) {
3
+ const parts = Diff.diffLines(oldContent, newContent);
4
+ const output = [];
5
+ const oldLines = oldContent.split("\n");
6
+ const newLines = newContent.split("\n");
7
+ const maxLineNum = Math.max(oldLines.length, newLines.length);
8
+ const lineNumWidth = String(maxLineNum).length;
9
+ let oldLineNum = 1;
10
+ let newLineNum = 1;
11
+ let lastWasChange = false;
12
+ let firstChangedLine;
13
+ for (let i = 0; i < parts.length; i++) {
14
+ const part = parts[i];
15
+ const raw = part.value.split("\n");
16
+ if (raw[raw.length - 1] === "") {
17
+ raw.pop();
18
+ }
19
+ if (part.added || part.removed) {
20
+ if (firstChangedLine === undefined) {
21
+ firstChangedLine = newLineNum;
22
+ }
23
+ for (const line of raw) {
24
+ if (part.added) {
25
+ const lineNum = String(newLineNum).padStart(lineNumWidth, " ");
26
+ output.push(`+${lineNum} ${line}`);
27
+ newLineNum += 1;
28
+ } else {
29
+ const lineNum = String(oldLineNum).padStart(lineNumWidth, " ");
30
+ output.push(`-${lineNum} ${line}`);
31
+ oldLineNum += 1;
32
+ }
33
+ }
34
+ lastWasChange = true;
35
+ continue;
36
+ }
37
+ const nextPartIsChange = i < parts.length - 1 && !!(parts[i + 1]?.added || parts[i + 1]?.removed);
38
+ if (lastWasChange || nextPartIsChange) {
39
+ let linesToShow = raw;
40
+ let skipStart = 0;
41
+ let skipEnd = 0;
42
+ if (!lastWasChange) {
43
+ skipStart = Math.max(0, raw.length - contextLines);
44
+ linesToShow = raw.slice(skipStart);
45
+ }
46
+ if (!nextPartIsChange && linesToShow.length > contextLines) {
47
+ skipEnd = linesToShow.length - contextLines;
48
+ linesToShow = linesToShow.slice(0, contextLines);
49
+ }
50
+ if (skipStart > 0) {
51
+ output.push(` ${"".padStart(lineNumWidth, " ")} ...`);
52
+ oldLineNum += skipStart;
53
+ newLineNum += skipStart;
54
+ }
55
+ for (const line of linesToShow) {
56
+ const lineNum = String(oldLineNum).padStart(lineNumWidth, " ");
57
+ output.push(` ${lineNum} ${line}`);
58
+ oldLineNum += 1;
59
+ newLineNum += 1;
60
+ }
61
+ if (skipEnd > 0) {
62
+ output.push(` ${"".padStart(lineNumWidth, " ")} ...`);
63
+ oldLineNum += skipEnd;
64
+ newLineNum += skipEnd;
65
+ }
66
+ } else {
67
+ oldLineNum += raw.length;
68
+ newLineNum += raw.length;
69
+ }
70
+ lastWasChange = false;
71
+ }
72
+ return {
73
+ diff: output.join("\n"),
74
+ firstChangedLine
75
+ };
76
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Diff","generateDiffString","oldContent","newContent","contextLines","parts","diffLines","output","oldLines","split","newLines","maxLineNum","Math","max","length","lineNumWidth","String","oldLineNum","newLineNum","lastWasChange","firstChangedLine","i","part","raw","value","pop","added","removed","undefined","line","lineNum","padStart","push","nextPartIsChange","linesToShow","skipStart","skipEnd","slice","diff","join"],"sources":["tool-diff.ts"],"sourcesContent":["import * as Diff from \"diff\";\n\nexport interface GeneratedDiff {\n\tdiff: string;\n\tfirstChangedLine: number | undefined;\n}\n\nexport function generateDiffString(\n\toldContent: string,\n\tnewContent: string,\n\tcontextLines = 4,\n): GeneratedDiff {\n\tconst parts = Diff.diffLines(oldContent, newContent);\n\tconst output: string[] = [];\n\n\tconst oldLines = oldContent.split(\"\\n\");\n\tconst newLines = newContent.split(\"\\n\");\n\tconst maxLineNum = Math.max(oldLines.length, newLines.length);\n\tconst lineNumWidth = String(maxLineNum).length;\n\n\tlet oldLineNum = 1;\n\tlet newLineNum = 1;\n\tlet lastWasChange = false;\n\tlet firstChangedLine: number | undefined;\n\n\tfor (let i = 0; i < parts.length; i++) {\n\t\tconst part = parts[i]!;\n\t\tconst raw = part.value.split(\"\\n\");\n\t\tif (raw[raw.length - 1] === \"\") {\n\t\t\traw.pop();\n\t\t}\n\n\t\tif (part.added || part.removed) {\n\t\t\tif (firstChangedLine === undefined) {\n\t\t\t\tfirstChangedLine = newLineNum;\n\t\t\t}\n\n\t\t\tfor (const line of raw) {\n\t\t\t\tif (part.added) {\n\t\t\t\t\tconst lineNum = String(newLineNum).padStart(lineNumWidth, \" \");\n\t\t\t\t\toutput.push(`+${lineNum} ${line}`);\n\t\t\t\t\tnewLineNum += 1;\n\t\t\t\t} else {\n\t\t\t\t\tconst lineNum = String(oldLineNum).padStart(lineNumWidth, \" \");\n\t\t\t\t\toutput.push(`-${lineNum} ${line}`);\n\t\t\t\t\toldLineNum += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t\tlastWasChange = true;\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst nextPartIsChange = i < parts.length - 1 && !!(parts[i + 1]?.added || parts[i + 1]?.removed);\n\n\t\tif (lastWasChange || nextPartIsChange) {\n\t\t\tlet linesToShow = raw;\n\t\t\tlet skipStart = 0;\n\t\t\tlet skipEnd = 0;\n\n\t\t\tif (!lastWasChange) {\n\t\t\t\tskipStart = Math.max(0, raw.length - contextLines);\n\t\t\t\tlinesToShow = raw.slice(skipStart);\n\t\t\t}\n\n\t\t\tif (!nextPartIsChange && linesToShow.length > contextLines) {\n\t\t\t\tskipEnd = linesToShow.length - contextLines;\n\t\t\t\tlinesToShow = linesToShow.slice(0, contextLines);\n\t\t\t}\n\n\t\t\tif (skipStart > 0) {\n\t\t\t\toutput.push(` ${\"\".padStart(lineNumWidth, \" \")} ...`);\n\t\t\t\toldLineNum += skipStart;\n\t\t\t\tnewLineNum += skipStart;\n\t\t\t}\n\n\t\t\tfor (const line of linesToShow) {\n\t\t\t\tconst lineNum = String(oldLineNum).padStart(lineNumWidth, \" \");\n\t\t\t\toutput.push(` ${lineNum} ${line}`);\n\t\t\t\toldLineNum += 1;\n\t\t\t\tnewLineNum += 1;\n\t\t\t}\n\n\t\t\tif (skipEnd > 0) {\n\t\t\t\toutput.push(` ${\"\".padStart(lineNumWidth, \" \")} ...`);\n\t\t\t\toldLineNum += skipEnd;\n\t\t\t\tnewLineNum += skipEnd;\n\t\t\t}\n\t\t} else {\n\t\t\toldLineNum += raw.length;\n\t\t\tnewLineNum += raw.length;\n\t\t}\n\n\t\tlastWasChange = false;\n\t}\n\n\treturn { diff: output.join(\"\\n\"), firstChangedLine };\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,268 @@
1
+ import { existsSync, readFileSync } from "node:fs";
2
+ import { isAbsolute, resolve } from "node:path";
3
+ import { generateDiffString } from "./tool-diff.js";
4
+ function readRecord(value) {
5
+ return typeof value === "object" && value !== null ? value : undefined;
6
+ }
7
+ function readString(record, keys) {
8
+ if (!record) {
9
+ return undefined;
10
+ }
11
+ for (const key of keys) {
12
+ const value = record[key];
13
+ if (typeof value === "string" && value.trim()) {
14
+ return value;
15
+ }
16
+ }
17
+ return undefined;
18
+ }
19
+ function normalizeDisplayText(value) {
20
+ return value.replace(/\r/g, "").trim();
21
+ }
22
+ function normalizePreviewText(value) {
23
+ return value.replace(/\r/g, "").trimEnd();
24
+ }
25
+ function extractContentBlocks(content) {
26
+ return content.map(block => {
27
+ if (block.type === "text" && typeof block.text === "string") {
28
+ return block.text;
29
+ }
30
+ if (block.type === "thinking" && typeof block.thinking === "string") {
31
+ return block.thinking;
32
+ }
33
+ if (block.type === "image") {
34
+ return "[image]";
35
+ }
36
+ if (block.type === "audio") {
37
+ return "[audio]";
38
+ }
39
+ return "";
40
+ }).filter(Boolean).join("\n\n");
41
+ }
42
+ function extractContentText(value) {
43
+ if (typeof value === "string") {
44
+ return normalizeDisplayText(value);
45
+ }
46
+ const record = readRecord(value);
47
+ if (!record) {
48
+ return "";
49
+ }
50
+ if (Array.isArray(record.content)) {
51
+ return normalizeDisplayText(extractContentBlocks(record.content));
52
+ }
53
+ return "";
54
+ }
55
+ function readPath(args) {
56
+ return readString(readRecord(args), ["path", "file_path", "filePath", "target", "destination"]);
57
+ }
58
+ function readDiffText(result) {
59
+ const record = readRecord(result);
60
+ if (!record) {
61
+ return undefined;
62
+ }
63
+ if (typeof record.diff === "string" && record.diff.trim()) {
64
+ return record.diff;
65
+ }
66
+ const details = readRecord(record.details);
67
+ return typeof details?.diff === "string" && details.diff.trim() ? details.diff : undefined;
68
+ }
69
+ function readFirstChangedLine(result) {
70
+ const record = readRecord(result);
71
+ if (!record) {
72
+ return undefined;
73
+ }
74
+ const details = readRecord(record.details);
75
+ const value = details?.firstChangedLine ?? record.firstChangedLine;
76
+ return typeof value === "number" && Number.isFinite(value) ? value : undefined;
77
+ }
78
+ function parseDiffLine(line) {
79
+ const match = line.match(/^([+-\s])(\s*\d*)\s(.*)$/);
80
+ if (!match) {
81
+ return {
82
+ kind: "meta",
83
+ content: line,
84
+ rawText: line
85
+ };
86
+ }
87
+ const prefix = match[1];
88
+ return {
89
+ kind: prefix === "+" ? "added" : prefix === "-" ? "removed" : "context",
90
+ lineNumber: match[2].trim() || undefined,
91
+ content: match[3],
92
+ rawText: line
93
+ };
94
+ }
95
+ export function parseToolDiff(diffText) {
96
+ const lines = diffText.replace(/\r/g, "").split("\n").map(parseDiffLine);
97
+ const stats = {
98
+ added: 0,
99
+ removed: 0,
100
+ context: 0,
101
+ meta: 0
102
+ };
103
+ for (const line of lines) {
104
+ switch (line.kind) {
105
+ case "added":
106
+ stats.added += 1;
107
+ break;
108
+ case "removed":
109
+ stats.removed += 1;
110
+ break;
111
+ case "context":
112
+ stats.context += 1;
113
+ break;
114
+ case "meta":
115
+ stats.meta += 1;
116
+ break;
117
+ }
118
+ }
119
+ return {
120
+ lines,
121
+ stats
122
+ };
123
+ }
124
+ function firstNonEmptyLine(value) {
125
+ return value.split("\n").map(line => line.trim()).find(Boolean);
126
+ }
127
+ function summarizeWritePreview(content) {
128
+ const lines = normalizePreviewText(content).split("\n");
129
+ if (lines.length <= 1) {
130
+ return `Prepared ${content.length} characters`;
131
+ }
132
+ return `Prepared ${lines.length} lines`;
133
+ }
134
+ function resolveWorkspacePath(path) {
135
+ return isAbsolute(path) ? path : resolve(process.cwd(), path);
136
+ }
137
+ function computeWritePreviewDiff(path, previewText) {
138
+ try {
139
+ const absolutePath = resolveWorkspacePath(path);
140
+ const existingContent = existsSync(absolutePath) ? readFileSync(absolutePath, "utf8") : "";
141
+ const diffResult = generateDiffString(existingContent, previewText);
142
+ if (!diffResult.diff) {
143
+ return undefined;
144
+ }
145
+ const parsedDiff = parseToolDiff(diffResult.diff);
146
+ return {
147
+ diffText: diffResult.diff,
148
+ diffLines: parsedDiff.lines,
149
+ diffStats: parsedDiff.stats,
150
+ firstChangedLine: diffResult.firstChangedLine
151
+ };
152
+ } catch {
153
+ return undefined;
154
+ }
155
+ }
156
+ function computeEditPreviewDiff(path, args) {
157
+ try {
158
+ const record = readRecord(args);
159
+ const oldText = readString(record, ["oldText", "old_text"]);
160
+ const newText = readString(record, ["newText", "new_text"]);
161
+ if (oldText === undefined || newText === undefined) {
162
+ return undefined;
163
+ }
164
+ const absolutePath = resolveWorkspacePath(path);
165
+ const existingContent = existsSync(absolutePath) ? readFileSync(absolutePath, "utf8") : "";
166
+ const newContent = existingContent.includes(oldText) ? existingContent.replace(oldText, newText) : newText;
167
+ const baseContent = existingContent.includes(oldText) ? existingContent : oldText;
168
+ const diffResult = generateDiffString(baseContent, newContent);
169
+ if (!diffResult.diff) {
170
+ return undefined;
171
+ }
172
+ const parsedDiff = parseToolDiff(diffResult.diff);
173
+ return {
174
+ diffText: diffResult.diff,
175
+ diffLines: parsedDiff.lines,
176
+ diffStats: parsedDiff.stats,
177
+ firstChangedLine: diffResult.firstChangedLine
178
+ };
179
+ } catch {
180
+ return undefined;
181
+ }
182
+ }
183
+ function buildEditChange(path, args, result) {
184
+ const diffText = readDiffText(result);
185
+ const parsedDiff = diffText ? parseToolDiff(diffText) : undefined;
186
+ const outputText = extractContentText(result);
187
+ const previewDiff = !result ? computeEditPreviewDiff(path, args) : undefined;
188
+ return {
189
+ kind: "edit",
190
+ path,
191
+ summary: outputText || (diffText || previewDiff ? `Updated ${path}` : `Editing ${path}`),
192
+ firstChangedLine: readFirstChangedLine(result) ?? previewDiff?.firstChangedLine,
193
+ diffText: diffText ?? previewDiff?.diffText,
194
+ diffLines: parsedDiff?.lines ?? previewDiff?.diffLines,
195
+ diffStats: parsedDiff?.stats ?? previewDiff?.diffStats
196
+ };
197
+ }
198
+ function buildWriteChange(path, args, result) {
199
+ const previewText = readString(readRecord(args), ["content"]);
200
+ const outputText = extractContentText(result);
201
+ const previewDiff = !result && previewText ? computeWritePreviewDiff(path, previewText) : undefined;
202
+ return {
203
+ kind: "write",
204
+ path,
205
+ summary: outputText || (previewText ? summarizeWritePreview(previewText) : `Writing ${path}`),
206
+ previewText: previewText ? normalizePreviewText(previewText) : undefined,
207
+ diffText: previewDiff?.diffText,
208
+ diffLines: previewDiff?.diffLines,
209
+ diffStats: previewDiff?.diffStats,
210
+ firstChangedLine: previewDiff?.firstChangedLine
211
+ };
212
+ }
213
+ export function extractToolFileChanges(toolName, args, result) {
214
+ const normalized = toolName.toLowerCase();
215
+ const path = readPath(args);
216
+ if (!path) {
217
+ return [];
218
+ }
219
+ if (normalized === "edit" || normalized === "edit_file" || normalized === "apply_patch" || normalized === "patch") {
220
+ return [buildEditChange(path, args, result)];
221
+ }
222
+ if (normalized === "write" || normalized === "write_file") {
223
+ return [buildWriteChange(path, args, result)];
224
+ }
225
+ return [];
226
+ }
227
+ export function toolFileChangeLocation(change) {
228
+ return change.firstChangedLine ? `${change.path}:${change.firstChangedLine}` : change.path;
229
+ }
230
+ export function formatToolDiffStats(stats) {
231
+ if (!stats) {
232
+ return undefined;
233
+ }
234
+ const parts = [];
235
+ if (stats.added > 0) {
236
+ parts.push(`+${stats.added}`);
237
+ }
238
+ if (stats.removed > 0) {
239
+ parts.push(`-${stats.removed}`);
240
+ }
241
+ if (stats.context > 0) {
242
+ parts.push(`${stats.context} ctx`);
243
+ }
244
+ return parts.join(" ");
245
+ }
246
+ export function formatToolDiffDeltaStats(stats) {
247
+ if (!stats) {
248
+ return undefined;
249
+ }
250
+ const parts = [];
251
+ if (stats.added > 0) {
252
+ parts.push(`+${stats.added}`);
253
+ }
254
+ if (stats.removed > 0) {
255
+ parts.push(`-${stats.removed}`);
256
+ }
257
+ return parts.join(" ");
258
+ }
259
+ export function toolFileChangeInlineSummary(change) {
260
+ const location = toolFileChangeLocation(change);
261
+ if (change.kind === "edit") {
262
+ return `${location}${formatToolDiffDeltaStats(change.diffStats) ? ` | ${formatToolDiffDeltaStats(change.diffStats)}` : ""}`;
263
+ }
264
+ if (change.previewText) {
265
+ return `${location} | ${firstNonEmptyLine(change.previewText) ?? change.summary}`;
266
+ }
267
+ return `${location} | ${change.summary}`;
268
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["existsSync","readFileSync","isAbsolute","resolve","generateDiffString","readRecord","value","undefined","readString","record","keys","key","trim","normalizeDisplayText","replace","normalizePreviewText","trimEnd","extractContentBlocks","content","map","block","type","text","thinking","filter","Boolean","join","extractContentText","Array","isArray","readPath","args","readDiffText","result","diff","details","readFirstChangedLine","firstChangedLine","Number","isFinite","parseDiffLine","line","match","kind","rawText","prefix","lineNumber","parseToolDiff","diffText","lines","split","stats","added","removed","context","meta","firstNonEmptyLine","find","summarizeWritePreview","length","resolveWorkspacePath","path","process","cwd","computeWritePreviewDiff","previewText","absolutePath","existingContent","diffResult","parsedDiff","diffLines","diffStats","computeEditPreviewDiff","oldText","newText","newContent","includes","baseContent","buildEditChange","outputText","previewDiff","summary","buildWriteChange","extractToolFileChanges","toolName","normalized","toLowerCase","toolFileChangeLocation","change","formatToolDiffStats","parts","push","formatToolDiffDeltaStats","toolFileChangeInlineSummary","location"],"sources":["tool-file-changes.ts"],"sourcesContent":["import { existsSync, readFileSync } from \"node:fs\";\nimport { isAbsolute, resolve } from \"node:path\";\nimport { generateDiffString } from \"./tool-diff.js\";\n\ntype ContentBlock = {\n\ttype?: string;\n\ttext?: string;\n\tthinking?: string;\n\t[key: string]: unknown;\n};\n\nexport type ToolFileChangeKind = \"edit\" | \"write\";\nexport type ToolDiffLineKind = \"added\" | \"removed\" | \"context\" | \"meta\";\n\nexport interface ToolDiffLine {\n\tkind: ToolDiffLineKind;\n\tlineNumber?: string;\n\tcontent: string;\n\trawText: string;\n}\n\nexport interface ToolDiffStats {\n\tadded: number;\n\tremoved: number;\n\tcontext: number;\n\tmeta: number;\n}\n\nexport interface ToolFileChange {\n\tkind: ToolFileChangeKind;\n\tpath: string;\n\tsummary: string;\n\tfirstChangedLine?: number;\n\tdiffText?: string;\n\tdiffLines?: ToolDiffLine[];\n\tdiffStats?: ToolDiffStats;\n\tpreviewText?: string;\n}\n\nfunction readRecord(value: unknown): Record<string, unknown> | undefined {\n\treturn typeof value === \"object\" && value !== null ? (value as Record<string, unknown>) : undefined;\n}\n\nfunction readString(record: Record<string, unknown> | undefined, keys: string[]): string | undefined {\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tfor (const key of keys) {\n\t\tconst value = record[key];\n\t\tif (typeof value === \"string\" && value.trim()) {\n\t\t\treturn value;\n\t\t}\n\t}\n\treturn undefined;\n}\n\nfunction normalizeDisplayText(value: string): string {\n\treturn value.replace(/\\r/g, \"\").trim();\n}\n\nfunction normalizePreviewText(value: string): string {\n\treturn value.replace(/\\r/g, \"\").trimEnd();\n}\n\nfunction extractContentBlocks(content: ContentBlock[]): string {\n\treturn content\n\t\t.map((block) => {\n\t\t\tif (block.type === \"text\" && typeof block.text === \"string\") {\n\t\t\t\treturn block.text;\n\t\t\t}\n\t\t\tif (block.type === \"thinking\" && typeof block.thinking === \"string\") {\n\t\t\t\treturn block.thinking;\n\t\t\t}\n\t\t\tif (block.type === \"image\") {\n\t\t\t\treturn \"[image]\";\n\t\t\t}\n\t\t\tif (block.type === \"audio\") {\n\t\t\t\treturn \"[audio]\";\n\t\t\t}\n\t\t\treturn \"\";\n\t\t})\n\t\t.filter(Boolean)\n\t\t.join(\"\\n\\n\");\n}\n\nfunction extractContentText(value: unknown): string {\n\tif (typeof value === \"string\") {\n\t\treturn normalizeDisplayText(value);\n\t}\n\n\tconst record = readRecord(value);\n\tif (!record) {\n\t\treturn \"\";\n\t}\n\n\tif (Array.isArray(record.content)) {\n\t\treturn normalizeDisplayText(extractContentBlocks(record.content as ContentBlock[]));\n\t}\n\n\treturn \"\";\n}\n\nfunction readPath(args: unknown): string | undefined {\n\treturn readString(readRecord(args), [\"path\", \"file_path\", \"filePath\", \"target\", \"destination\"]);\n}\n\nfunction readDiffText(result: unknown): string | undefined {\n\tconst record = readRecord(result);\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tif (typeof record.diff === \"string\" && record.diff.trim()) {\n\t\treturn record.diff;\n\t}\n\tconst details = readRecord(record.details);\n\treturn typeof details?.diff === \"string\" && details.diff.trim() ? details.diff : undefined;\n}\n\nfunction readFirstChangedLine(result: unknown): number | undefined {\n\tconst record = readRecord(result);\n\tif (!record) {\n\t\treturn undefined;\n\t}\n\tconst details = readRecord(record.details);\n\tconst value = details?.firstChangedLine ?? record.firstChangedLine;\n\treturn typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n}\n\nfunction parseDiffLine(line: string): ToolDiffLine {\n\tconst match = line.match(/^([+-\\s])(\\s*\\d*)\\s(.*)$/);\n\tif (!match) {\n\t\treturn {\n\t\t\tkind: \"meta\",\n\t\t\tcontent: line,\n\t\t\trawText: line,\n\t\t};\n\t}\n\n\tconst prefix = match[1];\n\treturn {\n\t\tkind: prefix === \"+\" ? \"added\" : prefix === \"-\" ? \"removed\" : \"context\",\n\t\tlineNumber: match[2].trim() || undefined,\n\t\tcontent: match[3],\n\t\trawText: line,\n\t};\n}\n\nexport function parseToolDiff(diffText: string): { lines: ToolDiffLine[]; stats: ToolDiffStats } {\n\tconst lines = diffText.replace(/\\r/g, \"\").split(\"\\n\").map(parseDiffLine);\n\tconst stats: ToolDiffStats = {\n\t\tadded: 0,\n\t\tremoved: 0,\n\t\tcontext: 0,\n\t\tmeta: 0,\n\t};\n\n\tfor (const line of lines) {\n\t\tswitch (line.kind) {\n\t\t\tcase \"added\":\n\t\t\t\tstats.added += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"removed\":\n\t\t\t\tstats.removed += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"context\":\n\t\t\t\tstats.context += 1;\n\t\t\t\tbreak;\n\t\t\tcase \"meta\":\n\t\t\t\tstats.meta += 1;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn { lines, stats };\n}\n\nfunction firstNonEmptyLine(value: string): string | undefined {\n\treturn value\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.trim())\n\t\t.find(Boolean);\n}\n\nfunction summarizeWritePreview(content: string): string {\n\tconst lines = normalizePreviewText(content).split(\"\\n\");\n\tif (lines.length <= 1) {\n\t\treturn `Prepared ${content.length} characters`;\n\t}\n\treturn `Prepared ${lines.length} lines`;\n}\n\nfunction resolveWorkspacePath(path: string): string {\n\treturn isAbsolute(path) ? path : resolve(process.cwd(), path);\n}\n\nfunction computeWritePreviewDiff(\n\tpath: string,\n\tpreviewText: string,\n): Pick<ToolFileChange, \"diffText\" | \"diffLines\" | \"diffStats\" | \"firstChangedLine\"> | undefined {\n\ttry {\n\t\tconst absolutePath = resolveWorkspacePath(path);\n\t\tconst existingContent = existsSync(absolutePath) ? readFileSync(absolutePath, \"utf8\") : \"\";\n\t\tconst diffResult = generateDiffString(existingContent, previewText);\n\t\tif (!diffResult.diff) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsedDiff = parseToolDiff(diffResult.diff);\n\t\treturn {\n\t\t\tdiffText: diffResult.diff,\n\t\t\tdiffLines: parsedDiff.lines,\n\t\t\tdiffStats: parsedDiff.stats,\n\t\t\tfirstChangedLine: diffResult.firstChangedLine,\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction computeEditPreviewDiff(\n\tpath: string,\n\targs: unknown,\n): Pick<ToolFileChange, \"diffText\" | \"diffLines\" | \"diffStats\" | \"firstChangedLine\"> | undefined {\n\ttry {\n\t\tconst record = readRecord(args);\n\t\tconst oldText = readString(record, [\"oldText\", \"old_text\"]);\n\t\tconst newText = readString(record, [\"newText\", \"new_text\"]);\n\t\tif (oldText === undefined || newText === undefined) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst absolutePath = resolveWorkspacePath(path);\n\t\tconst existingContent = existsSync(absolutePath) ? readFileSync(absolutePath, \"utf8\") : \"\";\n\t\tconst newContent = existingContent.includes(oldText)\n\t\t\t? existingContent.replace(oldText, newText)\n\t\t\t: newText;\n\t\tconst baseContent = existingContent.includes(oldText) ? existingContent : oldText;\n\t\tconst diffResult = generateDiffString(baseContent, newContent);\n\t\tif (!diffResult.diff) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tconst parsedDiff = parseToolDiff(diffResult.diff);\n\t\treturn {\n\t\t\tdiffText: diffResult.diff,\n\t\t\tdiffLines: parsedDiff.lines,\n\t\t\tdiffStats: parsedDiff.stats,\n\t\t\tfirstChangedLine: diffResult.firstChangedLine,\n\t\t};\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction buildEditChange(path: string, args: unknown, result: unknown): ToolFileChange {\n\tconst diffText = readDiffText(result);\n\tconst parsedDiff = diffText ? parseToolDiff(diffText) : undefined;\n\tconst outputText = extractContentText(result);\n\tconst previewDiff = !result ? computeEditPreviewDiff(path, args) : undefined;\n\n\treturn {\n\t\tkind: \"edit\",\n\t\tpath,\n\t\tsummary: outputText || (diffText || previewDiff ? `Updated ${path}` : `Editing ${path}`),\n\t\tfirstChangedLine: readFirstChangedLine(result) ?? previewDiff?.firstChangedLine,\n\t\tdiffText: diffText ?? previewDiff?.diffText,\n\t\tdiffLines: parsedDiff?.lines ?? previewDiff?.diffLines,\n\t\tdiffStats: parsedDiff?.stats ?? previewDiff?.diffStats,\n\t};\n}\n\nfunction buildWriteChange(path: string, args: unknown, result: unknown): ToolFileChange {\n\tconst previewText = readString(readRecord(args), [\"content\"]);\n\tconst outputText = extractContentText(result);\n\tconst previewDiff = !result && previewText ? computeWritePreviewDiff(path, previewText) : undefined;\n\n\treturn {\n\t\tkind: \"write\",\n\t\tpath,\n\t\tsummary: outputText || (previewText ? summarizeWritePreview(previewText) : `Writing ${path}`),\n\t\tpreviewText: previewText ? normalizePreviewText(previewText) : undefined,\n\t\tdiffText: previewDiff?.diffText,\n\t\tdiffLines: previewDiff?.diffLines,\n\t\tdiffStats: previewDiff?.diffStats,\n\t\tfirstChangedLine: previewDiff?.firstChangedLine,\n\t};\n}\n\nexport function extractToolFileChanges(toolName: string, args: unknown, result: unknown): ToolFileChange[] {\n\tconst normalized = toolName.toLowerCase();\n\tconst path = readPath(args);\n\tif (!path) {\n\t\treturn [];\n\t}\n\n\tif (normalized === \"edit\" || normalized === \"edit_file\" || normalized === \"apply_patch\" || normalized === \"patch\") {\n\t\treturn [buildEditChange(path, args, result)];\n\t}\n\n\tif (normalized === \"write\" || normalized === \"write_file\") {\n\t\treturn [buildWriteChange(path, args, result)];\n\t}\n\n\treturn [];\n}\n\nexport function toolFileChangeLocation(change: ToolFileChange): string {\n\treturn change.firstChangedLine ? `${change.path}:${change.firstChangedLine}` : change.path;\n}\n\nexport function formatToolDiffStats(stats: ToolDiffStats | undefined): string | undefined {\n\tif (!stats) {\n\t\treturn undefined;\n\t}\n\n\tconst parts: string[] = [];\n\tif (stats.added > 0) {\n\t\tparts.push(`+${stats.added}`);\n\t}\n\tif (stats.removed > 0) {\n\t\tparts.push(`-${stats.removed}`);\n\t}\n\tif (stats.context > 0) {\n\t\tparts.push(`${stats.context} ctx`);\n\t}\n\treturn parts.join(\" \");\n}\n\nexport function formatToolDiffDeltaStats(stats: ToolDiffStats | undefined): string | undefined {\n\tif (!stats) {\n\t\treturn undefined;\n\t}\n\n\tconst parts: string[] = [];\n\tif (stats.added > 0) {\n\t\tparts.push(`+${stats.added}`);\n\t}\n\tif (stats.removed > 0) {\n\t\tparts.push(`-${stats.removed}`);\n\t}\n\treturn parts.join(\" \");\n}\n\nexport function toolFileChangeInlineSummary(change: ToolFileChange): string {\n\tconst location = toolFileChangeLocation(change);\n\tif (change.kind === \"edit\") {\n\t\treturn `${location}${formatToolDiffDeltaStats(change.diffStats) ? ` | ${formatToolDiffDeltaStats(change.diffStats)}` : \"\"}`;\n\t}\n\tif (change.previewText) {\n\t\treturn `${location} | ${firstNonEmptyLine(change.previewText) ?? change.summary}`;\n\t}\n\treturn `${location} | ${change.summary}`;\n}\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,138 @@
1
+ import { memo as _$memo } from "@opentui/solid";
2
+ import { createComponent as _$createComponent } from "@opentui/solid";
3
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
4
+ import { effect as _$effect } from "@opentui/solid";
5
+ import { insertNode as _$insertNode } from "@opentui/solid";
6
+ import { insert as _$insert } from "@opentui/solid";
7
+ import { setProp as _$setProp } from "@opentui/solid";
8
+ import { createElement as _$createElement } from "@opentui/solid";
9
+ import { Show } from "solid-js";
10
+ import { FileChangeCardList } from "./file-change-preview.js";
11
+ import { wepscliShellTheme as theme } from "./theme.js";
12
+ import { toolStatusLabel, toolStatusTone } from "./tool-messages.js";
13
+ function toneColor(tone) {
14
+ switch (tone) {
15
+ case "accent":
16
+ return theme.accent;
17
+ case "success":
18
+ return theme.success;
19
+ case "warning":
20
+ return theme.warning;
21
+ case "danger":
22
+ return theme.danger;
23
+ case "muted":
24
+ return theme.muted;
25
+ }
26
+ }
27
+ function ToolTextSection(props) {
28
+ return (() => {
29
+ var _el$ = _$createElement("box"),
30
+ _el$2 = _$createElement("text"),
31
+ _el$3 = _$createElement("box"),
32
+ _el$4 = _$createElement("text");
33
+ _$insertNode(_el$, _el$2);
34
+ _$insertNode(_el$, _el$3);
35
+ _$setProp(_el$, "flexDirection", "column");
36
+ _$setProp(_el$, "gap", 1);
37
+ _$insert(_el$2, () => props.title);
38
+ _$insertNode(_el$3, _el$4);
39
+ _$setProp(_el$3, "border", ["left"]);
40
+ _$setProp(_el$3, "paddingLeft", 1);
41
+ _$setProp(_el$4, "wrapMode", "word");
42
+ _$insert(_el$4, () => props.body);
43
+ _$effect(_p$ => {
44
+ var _v$ = theme.accent,
45
+ _v$2 = theme.panelAlt,
46
+ _v$3 = theme.border,
47
+ _v$4 = theme.text;
48
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$2, "fg", _v$, _p$.e));
49
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$3, "backgroundColor", _v$2, _p$.t));
50
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$3, "borderColor", _v$3, _p$.a));
51
+ _v$4 !== _p$.o && (_p$.o = _$setProp(_el$4, "fg", _v$4, _p$.o));
52
+ return _p$;
53
+ }, {
54
+ e: undefined,
55
+ t: undefined,
56
+ a: undefined,
57
+ o: undefined
58
+ });
59
+ return _el$;
60
+ })();
61
+ }
62
+ export function ToolMessageDetail(props) {
63
+ const hasFileChanges = () => props.tool.fileChanges.length > 0;
64
+ return (() => {
65
+ var _el$5 = _$createElement("box"),
66
+ _el$6 = _$createElement("box"),
67
+ _el$7 = _$createElement("text"),
68
+ _el$8 = _$createElement("text"),
69
+ _el$9 = _$createElement("text"),
70
+ _el$0 = _$createTextNode(`Call ID: `);
71
+ _$insertNode(_el$5, _el$6);
72
+ _$insertNode(_el$5, _el$9);
73
+ _$setProp(_el$5, "flexDirection", "column");
74
+ _$setProp(_el$5, "gap", 1);
75
+ _$insertNode(_el$6, _el$7);
76
+ _$insertNode(_el$6, _el$8);
77
+ _$setProp(_el$6, "flexDirection", "row");
78
+ _$setProp(_el$6, "justifyContent", "space-between");
79
+ _$setProp(_el$6, "gap", 1);
80
+ _$insert(_el$7, () => props.tool.toolName);
81
+ _$insert(_el$8, () => toolStatusLabel(props.tool.status));
82
+ _$insertNode(_el$9, _el$0);
83
+ _$insert(_el$9, () => props.tool.toolCallId, null);
84
+ _$insert(_el$5, _$createComponent(Show, {
85
+ get when() {
86
+ return props.tool.fileChanges.length > 0;
87
+ },
88
+ get children() {
89
+ return _$createComponent(FileChangeCardList, {
90
+ get changes() {
91
+ return props.tool.fileChanges;
92
+ },
93
+ title: "File Changes"
94
+ });
95
+ }
96
+ }), null);
97
+ _$insert(_el$5, _$createComponent(Show, {
98
+ get when() {
99
+ return !hasFileChanges();
100
+ },
101
+ get children() {
102
+ return _$createComponent(ToolTextSection, {
103
+ title: "Arguments",
104
+ get body() {
105
+ return props.tool.argsText || "No arguments";
106
+ }
107
+ });
108
+ }
109
+ }), null);
110
+ _$insert(_el$5, _$createComponent(Show, {
111
+ get when() {
112
+ return _$memo(() => !!!hasFileChanges())() && props.tool.outputText;
113
+ },
114
+ get children() {
115
+ return _$createComponent(ToolTextSection, {
116
+ title: "Output",
117
+ get body() {
118
+ return props.tool.outputText;
119
+ }
120
+ });
121
+ }
122
+ }), null);
123
+ _$effect(_p$ => {
124
+ var _v$5 = theme.accent,
125
+ _v$6 = toneColor(toolStatusTone(props.tool.status)),
126
+ _v$7 = theme.muted;
127
+ _v$5 !== _p$.e && (_p$.e = _$setProp(_el$7, "fg", _v$5, _p$.e));
128
+ _v$6 !== _p$.t && (_p$.t = _$setProp(_el$8, "fg", _v$6, _p$.t));
129
+ _v$7 !== _p$.a && (_p$.a = _$setProp(_el$9, "fg", _v$7, _p$.a));
130
+ return _p$;
131
+ }, {
132
+ e: undefined,
133
+ t: undefined,
134
+ a: undefined
135
+ });
136
+ return _el$5;
137
+ })();
138
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"names":["Show","FileChangeCardList","wepscliShellTheme","theme","toolStatusLabel","toolStatusTone","toneColor","tone","accent","success","warning","danger","muted","ToolTextSection","props","_el$","_$createElement","_el$2","_el$3","_el$4","_$insertNode","_$setProp","_$insert","title","body","_$effect","_p$","_v$","_v$2","panelAlt","_v$3","border","_v$4","text","e","t","a","o","undefined","ToolMessageDetail","hasFileChanges","tool","fileChanges","length","_el$5","_el$6","_el$7","_el$8","_el$9","_el$0","_$createTextNode","toolName","status","toolCallId","_$createComponent","when","children","changes","argsText","_$memo","outputText","_v$5","_v$6","_v$7"],"sources":["tool-message-detail.tsx"],"sourcesContent":["import { Show } from \"solid-js\";\nimport { FileChangeCardList } from \"./file-change-preview.js\";\nimport { wepscliShellTheme as theme } from \"./theme.js\";\nimport { toolStatusLabel, toolStatusTone, type ToolMessageState } from \"./tool-messages.js\";\n\nfunction toneColor(tone: \"accent\" | \"success\" | \"warning\" | \"danger\" | \"muted\"): string {\n\tswitch (tone) {\n\t\tcase \"accent\":\n\t\t\treturn theme.accent;\n\t\tcase \"success\":\n\t\t\treturn theme.success;\n\t\tcase \"warning\":\n\t\t\treturn theme.warning;\n\t\tcase \"danger\":\n\t\t\treturn theme.danger;\n\t\tcase \"muted\":\n\t\t\treturn theme.muted;\n\t}\n}\n\nfunction ToolTextSection(props: { title: string; body: string }) {\n\treturn (\n\t\t<box flexDirection=\"column\" gap={1}>\n\t\t\t<text fg={theme.accent}>{props.title}</text>\n\t\t\t<box backgroundColor={theme.panelAlt} border={[\"left\"]} borderColor={theme.border} paddingLeft={1}>\n\t\t\t\t<text fg={theme.text} wrapMode=\"word\">{props.body}</text>\n\t\t\t</box>\n\t\t</box>\n\t);\n}\n\nexport function ToolMessageDetail(props: { tool: ToolMessageState }) {\n\tconst hasFileChanges = () => props.tool.fileChanges.length > 0;\n\n\treturn (\n\t\t<box flexDirection=\"column\" gap={1}>\n\t\t\t<box flexDirection=\"row\" justifyContent=\"space-between\" gap={1}>\n\t\t\t\t<text fg={theme.accent}>{props.tool.toolName}</text>\n\t\t\t\t<text fg={toneColor(toolStatusTone(props.tool.status))}>{toolStatusLabel(props.tool.status)}</text>\n\t\t\t</box>\n\t\t\t<text fg={theme.muted}>Call ID: {props.tool.toolCallId}</text>\n\t\t\t<Show when={props.tool.fileChanges.length > 0}>\n\t\t\t\t<FileChangeCardList changes={props.tool.fileChanges} title=\"File Changes\" />\n\t\t\t</Show>\n\t\t\t<Show when={!hasFileChanges()}>\n\t\t\t\t<ToolTextSection title=\"Arguments\" body={props.tool.argsText || \"No arguments\"} />\n\t\t\t</Show>\n\t\t\t<Show when={!hasFileChanges() && props.tool.outputText}>\n\t\t\t\t<ToolTextSection title=\"Output\" body={props.tool.outputText} />\n\t\t\t</Show>\n\t\t</box>\n\t);\n}\n"],"mappings":"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","ignoreList":[]}