feat: add agent prompt editing and update functionality
This commit is contained in:
+50
-3
@@ -130,6 +130,12 @@ export class SidebarChatProvider implements vscode.WebviewViewProvider, BridgeIn
|
|||||||
case 'setBrainProfile':
|
case 'setBrainProfile':
|
||||||
await this._setActiveBrainProfile(data.id);
|
await this._setActiveBrainProfile(data.id);
|
||||||
break;
|
break;
|
||||||
|
case 'getAgentContent':
|
||||||
|
await this._sendAgentContent(data.path);
|
||||||
|
break;
|
||||||
|
case 'updateAgent':
|
||||||
|
await this._updateAgent(data.path, data.content);
|
||||||
|
break;
|
||||||
case 'refreshModels':
|
case 'refreshModels':
|
||||||
await this._sendModels();
|
await this._sendModels();
|
||||||
break;
|
break;
|
||||||
@@ -622,6 +628,24 @@ export class SidebarChatProvider implements vscode.WebviewViewProvider, BridgeIn
|
|||||||
await this._sendAgentsList();
|
await this._sendAgentsList();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async _sendAgentContent(agentPath: string) {
|
||||||
|
if (!this._view || !agentPath || agentPath === 'none') return;
|
||||||
|
if (fs.existsSync(agentPath)) {
|
||||||
|
const content = fs.readFileSync(agentPath, 'utf8');
|
||||||
|
this._view.webview.postMessage({ type: 'agentContent', value: content });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private async _updateAgent(agentPath: string, content: string) {
|
||||||
|
if (!agentPath || agentPath === 'none') return;
|
||||||
|
try {
|
||||||
|
fs.writeFileSync(agentPath, content, 'utf8');
|
||||||
|
vscode.window.showInformationMessage('Agent skill updated successfully.');
|
||||||
|
} catch (err: any) {
|
||||||
|
vscode.window.showErrorMessage(`Failed to update agent: ${err.message}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private async _handlePrompt(data: any) {
|
private async _handlePrompt(data: any) {
|
||||||
if (!this._view) return;
|
if (!this._view) return;
|
||||||
|
|
||||||
@@ -1001,8 +1025,14 @@ export class SidebarChatProvider implements vscode.WebviewViewProvider, BridgeIn
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="input-wrap">
|
<div class="input-wrap">
|
||||||
<div id="agentConfigPanel" style="display:none; padding-bottom:8px;">
|
<div id="agentConfigPanel" style="display:none; padding-bottom:8px; flex-direction: column; gap: 8px;">
|
||||||
<textarea id="negativePrompt" rows="2" placeholder="Negative Prompt (What NOT to do)..." style="font-size:11.5px; padding:8px; border-radius:8px; border:1px solid var(--border); background:var(--input-bg); color:var(--text-bright); width:100%; resize:vertical; font-family:inherit; outline:none;"></textarea>
|
<div style="font-size: 10px; color: var(--text-dim); margin-bottom: -4px;">Agent Persona/Instructions</div>
|
||||||
|
<textarea id="agentPrompt" rows="5" placeholder="Agent Persona & Instructions..." style="font-size:11.5px; padding:8px; border-radius:8px; border:1px solid var(--border); background:var(--input-bg); color:var(--text-bright); width:100%; resize:vertical; font-family:inherit; outline:none;"></textarea>
|
||||||
|
|
||||||
|
<div style="font-size: 10px; color: var(--text-dim); margin-bottom: -4px;">Negative Prompt (Strict Rules)</div>
|
||||||
|
<textarea id="negativePrompt" rows="2" placeholder="What NOT to do..." style="font-size:11.5px; padding:8px; border-radius:8px; border:1px solid var(--border); background:var(--input-bg); color:var(--text-bright); width:100%; resize:vertical; font-family:inherit; outline:none;"></textarea>
|
||||||
|
|
||||||
|
<button id="updateAgentBtn" style="background: var(--surface); border: 1px solid var(--border); color: var(--text-primary); padding: 6px; font-size: 10px; border-radius: 6px; cursor: pointer; transition: 0.2s;">Update Agent Skill</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-box">
|
<div class="input-box">
|
||||||
<div id="attachPreview" class="attachment-preview"></div>
|
<div id="attachPreview" class="attachment-preview"></div>
|
||||||
@@ -1036,7 +1066,9 @@ export class SidebarChatProvider implements vscode.WebviewViewProvider, BridgeIn
|
|||||||
const agentSel = document.getElementById('agentSel');
|
const agentSel = document.getElementById('agentSel');
|
||||||
const addAgentBtn = document.getElementById('addAgentBtn');
|
const addAgentBtn = document.getElementById('addAgentBtn');
|
||||||
const agentConfigPanel = document.getElementById('agentConfigPanel');
|
const agentConfigPanel = document.getElementById('agentConfigPanel');
|
||||||
|
const agentPrompt = document.getElementById('agentPrompt');
|
||||||
const negativePrompt = document.getElementById('negativePrompt');
|
const negativePrompt = document.getElementById('negativePrompt');
|
||||||
|
const updateAgentBtn = document.getElementById('updateAgentBtn');
|
||||||
|
|
||||||
let streamBody = null;
|
let streamBody = null;
|
||||||
let internetEnabled = false;
|
let internetEnabled = false;
|
||||||
@@ -1163,6 +1195,9 @@ export class SidebarChatProvider implements vscode.WebviewViewProvider, BridgeIn
|
|||||||
agentSel.appendChild(o);
|
agentSel.appendChild(o);
|
||||||
});
|
});
|
||||||
break;
|
break;
|
||||||
|
case 'agentContent':
|
||||||
|
agentPrompt.value = msg.value;
|
||||||
|
break;
|
||||||
case 'error':
|
case 'error':
|
||||||
thinkingBar.classList.remove('active'); sendBtn.disabled = false;
|
thinkingBar.classList.remove('active'); sendBtn.disabled = false;
|
||||||
addMsg(msg.value, 'error');
|
addMsg(msg.value, 'error');
|
||||||
@@ -1242,13 +1277,25 @@ export class SidebarChatProvider implements vscode.WebviewViewProvider, BridgeIn
|
|||||||
|
|
||||||
agentSel.onchange = () => {
|
agentSel.onchange = () => {
|
||||||
if (agentSel.value !== 'none') {
|
if (agentSel.value !== 'none') {
|
||||||
agentConfigPanel.style.display = 'block';
|
agentConfigPanel.style.display = 'flex';
|
||||||
|
vscode.postMessage({ type: 'getAgentContent', path: agentSel.value });
|
||||||
} else {
|
} else {
|
||||||
agentConfigPanel.style.display = 'none';
|
agentConfigPanel.style.display = 'none';
|
||||||
|
agentPrompt.value = '';
|
||||||
negativePrompt.value = '';
|
negativePrompt.value = '';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
updateAgentBtn.onclick = () => {
|
||||||
|
if (agentSel.value !== 'none') {
|
||||||
|
vscode.postMessage({
|
||||||
|
type: 'updateAgent',
|
||||||
|
path: agentSel.value,
|
||||||
|
content: agentPrompt.value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
addAgentBtn.onclick = () => vscode.postMessage({ type: 'createAgent' });
|
addAgentBtn.onclick = () => vscode.postMessage({ type: 'createAgent' });
|
||||||
|
|
||||||
vscode.postMessage({ type: 'getModels' });
|
vscode.postMessage({ type: 'getModels' });
|
||||||
|
|||||||
Reference in New Issue
Block a user