Skip to content

Commit dfbdc61

Browse files
committed
feat(ai): add isDirty flag to working set and improve error logging
Working set entries now return { path, isDirty } so the AI can see unsaved files. Added [AI Control] prefixed console.error to screenshot, edit, and live preview failure paths for better debuggability.
1 parent 298a5eb commit dfbdc61

2 files changed

Lines changed: 18 additions & 4 deletions

File tree

src-node/mcp-editor-tools.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ function createEditorMcpServer(sdkModule, nodeConnector, clarificationAccessors)
6161
const hasClarification = clarificationAccessors && clarificationAccessors.hasClarification;
6262
const getEditorStateTool = sdkModule.tool(
6363
"getEditorState",
64-
"Get the current Phoenix editor state: active file, working set (open files), live preview file, " +
64+
"Get the current Phoenix editor state: active file, working set (open files with isDirty flag), live preview file, " +
6565
"cursor/selection info (current line text with surrounding context, or selected text), " +
6666
"and the currently selected element in the live preview (tag, selector, text preview) if any. " +
6767
"The live preview selected element may differ from the editor cursor — use execJsInLivePreview to inspect it further. " +

src/core-ai/aiPhoenixConnectors.js

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,9 @@ define(function (require, exports, module) {
213213
if (p.startsWith("/tauri/")) {
214214
p = p.replace("/tauri", "");
215215
}
216-
return p;
216+
const doc = DocumentManager.getOpenDocumentForPath(file.fullPath);
217+
const isDirty = doc ? doc.isDirty : false;
218+
return { path: p, isDirty: isDirty };
217219
});
218220

219221
let livePreviewFile = null;
@@ -338,6 +340,7 @@ define(function (require, exports, module) {
338340
deferred.resolve({ base64: base64 });
339341
})
340342
.catch(function (err) {
343+
console.error("[AI Control] Screenshot failed:", err);
341344
deferred.resolve({ base64: null, error: err.message || String(err) });
342345
});
343346
return deferred.promise();
@@ -350,6 +353,14 @@ define(function (require, exports, module) {
350353
return deferred.promise();
351354
}
352355

356+
function _onResult(result) {
357+
if (result.base64) {
358+
console.log("[AI Control] Screenshot taken:", params.selector || "full window",
359+
params.purePreview ? "(pure preview)" : "");
360+
}
361+
deferred.resolve(result);
362+
}
363+
353364
if (params.purePreview) {
354365
const previousMode = LiveDevMain.getCurrentMode();
355366
LiveDevMain.setMode(LivePreviewConstants.LIVE_PREVIEW_MODE);
@@ -358,12 +369,12 @@ define(function (require, exports, module) {
358369
_captureScreenshot(params.selector)
359370
.done(function (result) {
360371
LiveDevMain.setMode(previousMode);
361-
deferred.resolve(result);
372+
_onResult(result);
362373
});
363374
}, 150);
364375
} else {
365376
_captureScreenshot(params.selector)
366-
.done(function (result) { deferred.resolve(result); });
377+
.done(function (result) { _onResult(result); });
367378
}
368379

369380
return deferred.promise();
@@ -490,6 +501,7 @@ define(function (require, exports, module) {
490501
});
491502
})
492503
.fail(function (err) {
504+
console.error("[AI Control] applyEditToBuffer failed:", err);
493505
deferred.resolve({ applied: false, error: err.message || String(err) });
494506
});
495507
return deferred.promise();
@@ -544,6 +556,7 @@ define(function (require, exports, module) {
544556
})
545557
.fail(function (err) {
546558
_onExecJsDone();
559+
console.error("[AI Control] execJsInLivePreview failed:", err);
547560
deferred.resolve({ error: (err && err.message) || String(err) || "evaluate() failed" });
548561
});
549562
}
@@ -581,6 +594,7 @@ define(function (require, exports, module) {
581594
if (settled) { return; }
582595
cleanup();
583596
_onExecJsDone();
597+
console.error("[AI Control] Timed out waiting for live preview connection (30s)");
584598
deferred.resolve({ error: "Timed out waiting for live preview connection (30s)" });
585599
}, TIMEOUT);
586600

0 commit comments

Comments
 (0)