System-Prompt-Modal: strukturierte Blöcke via API statt Frontend-Parsing
- SystemPromptBuilder.BuildBlocks() liefert List<PromptBlock> mit Icon/Label/Content
- Neuer Endpoint GET /api/sessions/{id}/system-prompt-blocks (JSON-Array)
- Labels beschreiben präzise die Herkunft jedes Blocks (Agent, Session, System, Skills)
- Verhalten + Erinnerung nur noch mit Workspace + ToolChoice:any (Bugfix)
- Frontend: simples Block-Rendering statt komplexer Heuristik-Logik
- SP-Block Styling mit Label-Header und Content-Box
This commit is contained in:
1 parent
40e56acc30
commit
d42e5077c4
5 files changed
+148
-25
No files matched your search
@@ -548,6 +548,31 @@
|
||||
padding: var(--page-padding);
|
||||
overflow-y: auto;
|
||||
flex: 1;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: var(--box-spacing);
|
||||
}
|
||||
|
||||
.sp-block {
|
||||
border: var(--border-width) solid var(--f2-border);
|
||||
border-radius: var(--border-radius);
|
||||
}
|
||||
|
||||
.sp-block-label {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: var(--badge-spacing);
|
||||
padding: var(--box-padding);
|
||||
background: rgb(from var(--f1-bg) r g b / var(--semi-transparent));
|
||||
border-bottom: var(--border-width) solid var(--f1-border);
|
||||
font-size: var(--font-size);
|
||||
border-radius: var(--border-radius) var(--border-radius) 0 0;
|
||||
}
|
||||
|
||||
.sp-block-content {
|
||||
background: rgb(from var(--f3-bg) r g b / var(--semi-transparent));
|
||||
padding: var(--box-padding);
|
||||
border-radius: 0 0 var(--border-radius) var(--border-radius);
|
||||
}
|
||||
|
||||
.sp-loading {
|
||||
|
||||
@@ -122,6 +122,12 @@ async function apiGetSystemPrompt(sessionId) {
|
||||
return resp.text();
|
||||
}
|
||||
|
||||
async function apiGetSystemPromptBlocks(sessionId) {
|
||||
const resp = await fetch(`/api/sessions/${sessionId}/system-prompt-blocks`);
|
||||
if (!resp.ok) throw new Error('System-Prompt konnte nicht geladen werden');
|
||||
return resp.json();
|
||||
}
|
||||
|
||||
async function apiIsStreaming(sessionId) {
|
||||
const resp = await fetch(`/api/sessions/${sessionId}/streaming`);
|
||||
return resp.json();
|
||||
|
||||
+25
-2
@@ -607,6 +607,28 @@ async function loadAndShowAttachments(messageId, indicator) {
|
||||
|
||||
// ── System-Prompt Modal ──
|
||||
|
||||
function _renderSystemPromptBlocks(container, blocks) {
|
||||
for (var i = 0; i < blocks.length; i++) {
|
||||
var block = blocks[i];
|
||||
if (!block.content) continue;
|
||||
|
||||
var wrapper = document.createElement('div');
|
||||
wrapper.className = 'sp-block';
|
||||
|
||||
var label = document.createElement('div');
|
||||
label.className = 'sp-block-label';
|
||||
label.innerHTML = '<i class="fa ' + esc(block.icon || 'fa-cog') + '"></i> ' + esc(block.label || 'Block');
|
||||
wrapper.appendChild(label);
|
||||
|
||||
var content = document.createElement('div');
|
||||
content.className = 'sp-block-content markdown';
|
||||
content.innerHTML = renderMarkdown(block.content);
|
||||
wrapper.appendChild(content);
|
||||
|
||||
container.appendChild(wrapper);
|
||||
}
|
||||
}
|
||||
|
||||
async function showSystemPromptModal(sessionId) {
|
||||
// Overlay
|
||||
const overlay = document.createElement('div');
|
||||
@@ -650,8 +672,9 @@ async function showSystemPromptModal(sessionId) {
|
||||
|
||||
// Laden
|
||||
try {
|
||||
const prompt = await apiGetSystemPrompt(sessionId);
|
||||
body.innerHTML = renderMarkdown(prompt);
|
||||
const blocks = await apiGetSystemPromptBlocks(sessionId);
|
||||
body.innerHTML = '';
|
||||
_renderSystemPromptBlocks(body, blocks);
|
||||
} catch (e) {
|
||||
body.innerHTML = '<div class="sp-loading" style="color:var(--dangerous)">Fehler beim Laden des System-Prompts</div>';
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user