summaryrefslogtreecommitdiffhomepage
path: root/src/chat-view.ts
diff options
context:
space:
mode:
authorAdam Malczewski <[email protected]>2026-03-24 16:32:44 +0900
committerAdam Malczewski <[email protected]>2026-03-24 16:32:44 +0900
commitdfe26f42be0c37591246d4a26e607d9fbecfef33 (patch)
treea9aaea3982f0fdc6b9ef721c4009a7c86af8e6f6 /src/chat-view.ts
parent6a6bc5379a3a4620df07b4bb196ec0ded636fc8b (diff)
downloadai-pulse-obsidian-plugin-dfe26f42be0c37591246d4a26e607d9fbecfef33.tar.gz
ai-pulse-obsidian-plugin-dfe26f42be0c37591246d4a26e607d9fbecfef33.zip
Improve edit_file prompts, empty-file support, approval review
Diffstat (limited to 'src/chat-view.ts')
-rw-r--r--src/chat-view.ts71
1 files changed, 65 insertions, 6 deletions
diff --git a/src/chat-view.ts b/src/chat-view.ts
index fbb6360..526a6c1 100644
--- a/src/chat-view.ts
+++ b/src/chat-view.ts
@@ -387,13 +387,36 @@ export class ChatView extends ItemView {
const collapseContent = collapse.createDiv({ cls: "ai-organizer-collapse-content" });
const contentInner = collapseContent.createDiv({ cls: "ai-organizer-collapse-content-inner" });
- const argsStr = JSON.stringify(event.args, null, 2);
- contentInner.createEl("pre", { text: argsStr, cls: "ai-organizer-tool-call-args" });
+ if (event.toolName === "edit_file") {
+ // For edit_file, show old_text / new_text in dedicated labeled blocks
+ const filePath = typeof event.args.file_path === "string" ? event.args.file_path : "";
+ const oldText = typeof event.args.old_text === "string" ? event.args.old_text : "";
+ const newText = typeof event.args.new_text === "string" ? event.args.new_text : "";
+
+ if (filePath !== "") {
+ contentInner.createEl("div", { text: `File: ${filePath}`, cls: "ai-organizer-tool-call-label" });
+ }
+
+ contentInner.createEl("div", { text: "Old text:", cls: "ai-organizer-tool-call-label" });
+ contentInner.createEl("pre", {
+ text: oldText === "" ? "(empty — new file)" : oldText,
+ cls: "ai-organizer-tool-call-args",
+ });
- const resultPreview = event.result.length > 500
- ? event.result.substring(0, 500) + "..."
- : event.result;
- contentInner.createEl("pre", { text: resultPreview, cls: "ai-organizer-tool-call-result" });
+ contentInner.createEl("div", { text: "New text:", cls: "ai-organizer-tool-call-label" });
+ contentInner.createEl("pre", {
+ text: newText,
+ cls: "ai-organizer-tool-call-result",
+ });
+ } else {
+ const argsStr = JSON.stringify(event.args, null, 2);
+ contentInner.createEl("pre", { text: argsStr, cls: "ai-organizer-tool-call-args" });
+
+ const resultPreview = event.result.length > 500
+ ? event.result.substring(0, 500) + "..."
+ : event.result;
+ contentInner.createEl("pre", { text: resultPreview, cls: "ai-organizer-tool-call-result" });
+ }
}
private showApprovalRequest(event: ApprovalRequestEvent): Promise<boolean> {
@@ -411,6 +434,42 @@ export class ChatView extends ItemView {
container.createDiv({ text: event.message, cls: "ai-organizer-approval-message" });
+ // Show details for edit_file so the user can review the change
+ if (event.toolName === "edit_file") {
+ const oldText = typeof event.args.old_text === "string" ? event.args.old_text : "";
+ const newText = typeof event.args.new_text === "string" ? event.args.new_text : "";
+
+ const collapse = container.createDiv({ cls: "ai-organizer-collapse ai-organizer-collapse-arrow" });
+ const collapseId = `approval-collapse-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
+ const checkbox = collapse.createEl("input", {
+ type: "checkbox",
+ attr: { id: collapseId, checked: "" },
+ });
+ checkbox.addClass("ai-organizer-collapse-toggle");
+ checkbox.checked = true;
+ const titleEl = collapse.createEl("label", {
+ cls: "ai-organizer-collapse-title",
+ attr: { for: collapseId },
+ text: "Review changes",
+ });
+ void titleEl;
+
+ const collapseContent = collapse.createDiv({ cls: "ai-organizer-collapse-content" });
+ const contentInner = collapseContent.createDiv({ cls: "ai-organizer-collapse-content-inner" });
+
+ contentInner.createEl("div", { text: "Old text:", cls: "ai-organizer-tool-call-label" });
+ contentInner.createEl("pre", {
+ text: oldText === "" ? "(empty \u2014 new file)" : oldText,
+ cls: "ai-organizer-tool-call-args",
+ });
+
+ contentInner.createEl("div", { text: "New text:", cls: "ai-organizer-tool-call-label" });
+ contentInner.createEl("pre", {
+ text: newText,
+ cls: "ai-organizer-tool-call-result",
+ });
+ }
+
const buttonRow = container.createDiv({ cls: "ai-organizer-approval-buttons" });
const approveBtn = buttonRow.createEl("button", {