AutoCommit: Bool → Dropdown (mention/enforce/forbid), leerer System-Prompt fix
This commit is contained in:
1 parent
7410a18755
commit
40bab457d9
10 files changed
+52
-27
No files matched your search
@@ -54,7 +54,7 @@ public static class AgentEndpoint
|
|||||||
Model = body.TryGetProperty("model", out var m) ? m.GetString() ?? "sonnet" : "sonnet",
|
Model = body.TryGetProperty("model", out var m) ? m.GetString() ?? "sonnet" : "sonnet",
|
||||||
ToolChoice = body.TryGetProperty("toolChoice", out var tc) ? tc.GetString() ?? "any" : "any",
|
ToolChoice = body.TryGetProperty("toolChoice", out var tc) ? tc.GetString() ?? "any" : "any",
|
||||||
CustomCommands = customCommands,
|
CustomCommands = customCommands,
|
||||||
AutoCommit = body.TryGetProperty("autoCommit", out var ac) && ac.GetBoolean(),
|
AutoCommit = body.TryGetProperty("autoCommit", out var ac) ? ac.GetString() ?? "" : "",
|
||||||
UseSoul = !body.TryGetProperty("useSoul", out var us) || us.GetBoolean(),
|
UseSoul = !body.TryGetProperty("useSoul", out var us) || us.GetBoolean(),
|
||||||
UseIdentity = !body.TryGetProperty("useIdentity", out var ui) || ui.GetBoolean(),
|
UseIdentity = !body.TryGetProperty("useIdentity", out var ui) || ui.GetBoolean(),
|
||||||
UseUserInfo = !body.TryGetProperty("useUserInfo", out var uu) || uu.GetBoolean(),
|
UseUserInfo = !body.TryGetProperty("useUserInfo", out var uu) || uu.GetBoolean(),
|
||||||
@@ -83,7 +83,7 @@ public static class AgentEndpoint
|
|||||||
if (body.TryGetProperty("toolChoice", out var tc)) agent.ToolChoice = tc.GetString();
|
if (body.TryGetProperty("toolChoice", out var tc)) agent.ToolChoice = tc.GetString();
|
||||||
if (body.TryGetProperty("customCommands", out var cc))
|
if (body.TryGetProperty("customCommands", out var cc))
|
||||||
agent.CustomCommands = cc.ValueKind == JsonValueKind.Null ? null : cc.GetRawText();
|
agent.CustomCommands = cc.ValueKind == JsonValueKind.Null ? null : cc.GetRawText();
|
||||||
if (body.TryGetProperty("autoCommit", out var ac)) agent.AutoCommit = ac.GetBoolean();
|
if (body.TryGetProperty("autoCommit", out var ac)) agent.AutoCommit = ac.GetString() ?? "";
|
||||||
if (body.TryGetProperty("useSoul", out var us)) agent.UseSoul = us.GetBoolean();
|
if (body.TryGetProperty("useSoul", out var us)) agent.UseSoul = us.GetBoolean();
|
||||||
if (body.TryGetProperty("useIdentity", out var ui)) agent.UseIdentity = ui.GetBoolean();
|
if (body.TryGetProperty("useIdentity", out var ui)) agent.UseIdentity = ui.GetBoolean();
|
||||||
if (body.TryGetProperty("useUserInfo", out var uu)) agent.UseUserInfo = uu.GetBoolean();
|
if (body.TryGetProperty("useUserInfo", out var uu)) agent.UseUserInfo = uu.GetBoolean();
|
||||||
|
|||||||
@@ -146,10 +146,9 @@ public static class ChatEndpoint
|
|||||||
}, attachmentRecords);
|
}, attachmentRecords);
|
||||||
}
|
}
|
||||||
|
|
||||||
var systemPrompt = new List<object>
|
var systemPrompt = string.IsNullOrWhiteSpace(systemPromptText)
|
||||||
{
|
? new List<object>()
|
||||||
new { type = "text", text = systemPromptText }
|
: new List<object> { new { type = "text", text = systemPromptText } };
|
||||||
};
|
|
||||||
|
|
||||||
var workspace = session.Workspace;
|
var workspace = session.Workspace;
|
||||||
if (!string.IsNullOrEmpty(workspace))
|
if (!string.IsNullOrEmpty(workspace))
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ public class AgentRecord
|
|||||||
public string Model { get; set; } // sonnet, opus
|
public string Model { get; set; } // sonnet, opus
|
||||||
public string ToolChoice { get; set; } // "any" oder "auto"
|
public string ToolChoice { get; set; } // "any" oder "auto"
|
||||||
public string CustomCommands { get; set; }
|
public string CustomCommands { get; set; }
|
||||||
public bool AutoCommit { get; set; }
|
public string AutoCommit { get; set; } = ""; // "", "mention", "forbid"
|
||||||
public bool UseSoul { get; set; } = true;
|
public bool UseSoul { get; set; } = true;
|
||||||
public bool UseIdentity { get; set; } = true;
|
public bool UseIdentity { get; set; } = true;
|
||||||
public bool UseUserInfo { get; set; } = true;
|
public bool UseUserInfo { get; set; } = true;
|
||||||
|
|||||||
@@ -66,11 +66,13 @@ public class AnthropicService
|
|||||||
["model"] = modelId,
|
["model"] = modelId,
|
||||||
["max_tokens"] = 16384,
|
["max_tokens"] = 16384,
|
||||||
["cache_control"] = new { type = "ephemeral" },
|
["cache_control"] = new { type = "ephemeral" },
|
||||||
["system"] = systemPrompt,
|
|
||||||
["messages"] = messages,
|
["messages"] = messages,
|
||||||
["stream"] = true
|
["stream"] = true
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (systemPrompt != null && systemPrompt.Count > 0)
|
||||||
|
payload["system"] = systemPrompt;
|
||||||
|
|
||||||
var hasWorkspace = !string.IsNullOrEmpty(workspace);
|
var hasWorkspace = !string.IsNullOrEmpty(workspace);
|
||||||
var includeMemory = useMemory && _memoryService != null && !string.IsNullOrEmpty(agentId);
|
var includeMemory = useMemory && _memoryService != null && !string.IsNullOrEmpty(agentId);
|
||||||
|
|
||||||
|
|||||||
@@ -130,6 +130,14 @@ public class DatabaseService
|
|||||||
TryAddColumn(conn, "agents", "custom_commands", "TEXT");
|
TryAddColumn(conn, "agents", "custom_commands", "TEXT");
|
||||||
TryAddColumn(conn, "messages", "is_marked", "INTEGER NOT NULL DEFAULT 0");
|
TryAddColumn(conn, "messages", "is_marked", "INTEGER NOT NULL DEFAULT 0");
|
||||||
TryAddColumn(conn, "agents", "auto_commit", "INTEGER NOT NULL DEFAULT 0");
|
TryAddColumn(conn, "agents", "auto_commit", "INTEGER NOT NULL DEFAULT 0");
|
||||||
|
|
||||||
|
// Migration: auto_commit von INTEGER (0/1) zu TEXT ("", "mention", "forbid")
|
||||||
|
try
|
||||||
|
{
|
||||||
|
conn.Execute("UPDATE agents SET auto_commit = '' WHERE auto_commit = '0' OR auto_commit = 0");
|
||||||
|
conn.Execute("UPDATE agents SET auto_commit = 'enforce' WHERE auto_commit = '1' OR auto_commit = 1");
|
||||||
|
}
|
||||||
|
catch { /* already migrated */ }
|
||||||
TryAddColumn(conn, "agents", "use_soul", "INTEGER NOT NULL DEFAULT 1");
|
TryAddColumn(conn, "agents", "use_soul", "INTEGER NOT NULL DEFAULT 1");
|
||||||
TryAddColumn(conn, "agents", "use_identity", "INTEGER NOT NULL DEFAULT 1");
|
TryAddColumn(conn, "agents", "use_identity", "INTEGER NOT NULL DEFAULT 1");
|
||||||
TryAddColumn(conn, "agents", "use_user_info", "INTEGER NOT NULL DEFAULT 1");
|
TryAddColumn(conn, "agents", "use_user_info", "INTEGER NOT NULL DEFAULT 1");
|
||||||
|
|||||||
@@ -150,24 +150,35 @@ Wenn der User auf eine bestimmte Zeile in einer Datei verweist (z.B. `[Datei: fo
|
|||||||
// Git-Commit-Verhalten: relevant sobald Workspace vorhanden (unabhängig von ToolChoice)
|
// Git-Commit-Verhalten: relevant sobald Workspace vorhanden (unabhängig von ToolChoice)
|
||||||
if (!string.IsNullOrWhiteSpace(session.Workspace))
|
if (!string.IsNullOrWhiteSpace(session.Workspace))
|
||||||
{
|
{
|
||||||
if (agent.AutoCommit)
|
var autoCommit = (agent.AutoCommit ?? "").ToLowerInvariant();
|
||||||
|
if (autoCommit == "mention")
|
||||||
{
|
{
|
||||||
blocks.Add(new PromptBlock
|
blocks.Add(new PromptBlock
|
||||||
{
|
{
|
||||||
Icon = "fa-code-branch",
|
Icon = "fa-code-branch",
|
||||||
Label = "Agent · Git-Verhalten (Workspace + AutoCommit)",
|
Label = "Agent · Git-Verhalten (Workspace, Anmerken)",
|
||||||
Content = "## Git-Commits\n- Nach jeder abgeschlossenen Änderung MUSS ein Git-Commit erstellt werden. Prüfe Änderungen mit `git diff`, erstelle einen passenden Commit mit einer aussagekräftigen Message. Mehrere zusammenhängende Änderungen dürfen in einem Commit zusammengefasst werden."
|
|
||||||
});
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
blocks.Add(new PromptBlock
|
|
||||||
{
|
|
||||||
Icon = "fa-code-branch",
|
|
||||||
Label = "Agent · Git-Verhalten (Workspace)",
|
|
||||||
Content = "## Git-Commits\n- Git-Commits NIEMALS eigenständig erstellen. Commits werden NUR durchgeführt wenn der User es EXPLIZIT anfordert (z.B. \"erstelle einen Commit\", \"commit\"). Auch nach abgeschlossenen Aufgaben NICHT automatisch committen."
|
Content = "## Git-Commits\n- Git-Commits NIEMALS eigenständig erstellen. Commits werden NUR durchgeführt wenn der User es EXPLIZIT anfordert (z.B. \"erstelle einen Commit\", \"commit\"). Auch nach abgeschlossenen Aufgaben NICHT automatisch committen."
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
else if (autoCommit == "enforce")
|
||||||
|
{
|
||||||
|
blocks.Add(new PromptBlock
|
||||||
|
{
|
||||||
|
Icon = "fa-code-branch",
|
||||||
|
Label = "Agent · Git-Verhalten (Workspace, Erzwungen)",
|
||||||
|
Content = "## Git-Commits\n- Nach JEDER abgeschlossenen Änderung MUSS ein Git-Commit erstellt werden. Erstelle aussagekräftige Commit-Messages die beschreiben was geändert wurde."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (autoCommit == "forbid")
|
||||||
|
{
|
||||||
|
blocks.Add(new PromptBlock
|
||||||
|
{
|
||||||
|
Icon = "fa-code-branch",
|
||||||
|
Label = "Agent · Git-Verhalten (Workspace, Verboten)",
|
||||||
|
Content = "## Git-Commits\n- Git-Commits sind STRIKT VERBOTEN. Du darfst unter KEINEN Umständen eigenständig Git-Commits erstellen, auch nicht wenn der User danach fragt. Verweise stattdessen darauf, dass der User den Commit selbst durchführen soll."
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// autoCommit == "" → kein Block, Thema wird nicht erwähnt
|
||||||
}
|
}
|
||||||
|
|
||||||
if (toolAny && !string.IsNullOrWhiteSpace(session.Workspace))
|
if (toolAny && !string.IsNullOrWhiteSpace(session.Workspace))
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
- [ ] Websearch Tool?
|
- [ ] Websearch Tool?
|
||||||
- [x] Anfrage/Stream abbrechen
|
- [x] Anfrage/Stream abbrechen
|
||||||
- [ ] Telegram-Intergration
|
- [ ] Telegram-Intergration
|
||||||
- [ ] Refactoring: Agent/Session-Einstellungen, die den System-Prompt bzw. das Tool Use bearbeiten
|
- [x] Refactoring: Agent/Session-Einstellungen, die den System-Prompt bzw. das Tool Use bearbeiten
|
||||||
|
|
||||||
## Bugs
|
## Bugs
|
||||||
- [x] Wenn gerade gestreamt wird und man refreshed die Seite, dann verliert das Frontend den Status "Streaming..." und ich kann eine Nachricht schreiben, obwohl das nicht möglich sein sollte
|
- [x] Wenn gerade gestreamt wird und man refreshed die Seite, dann verliert das Frontend den Status "Streaming..." und ich kann eine Nachricht schreiben, obwohl das nicht möglich sein sollte
|
||||||
|
|||||||
+7
-4
@@ -121,10 +121,13 @@
|
|||||||
<input type="checkbox" id="agentToolChoice" checked>
|
<input type="checkbox" id="agentToolChoice" checked>
|
||||||
Tool-Nutzung erzwingen <span class="checkbox-hint">(tool_choice: any)</span>
|
Tool-Nutzung erzwingen <span class="checkbox-hint">(tool_choice: any)</span>
|
||||||
</label>
|
</label>
|
||||||
<label class="checkbox-label">
|
<label>Git-Commit-Verhalten</label>
|
||||||
<input type="checkbox" id="agentAutoCommit">
|
<select id="agentAutoCommit">
|
||||||
Auto-Commit erlauben <span class="checkbox-hint">(Agent darf eigenständig committen)</span>
|
<option value="">Nicht erwähnen</option>
|
||||||
</label>
|
<option value="mention">Anmerken (nur auf Anweisung)</option>
|
||||||
|
<option value="enforce">Erzwingen (nach jeder Änderung)</option>
|
||||||
|
<option value="forbid">Verbieten (strikt verboten)</option>
|
||||||
|
</select>
|
||||||
<label class="checkbox-label">
|
<label class="checkbox-label">
|
||||||
<input type="checkbox" id="agentUseSoul" checked>
|
<input type="checkbox" id="agentUseSoul" checked>
|
||||||
Hat eine Seele <span class="checkbox-hint">(SOUL.md im System-Prompt)</span>
|
Hat eine Seele <span class="checkbox-hint">(SOUL.md im System-Prompt)</span>
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ registerPage('agent', {
|
|||||||
descEl.value = agent.description || '';
|
descEl.value = agent.description || '';
|
||||||
modelEl.value = agent.model || 'sonnet';
|
modelEl.value = agent.model || 'sonnet';
|
||||||
toolChoiceEl.checked = (agent.toolChoice || 'any') === 'any';
|
toolChoiceEl.checked = (agent.toolChoice || 'any') === 'any';
|
||||||
autoCommitEl.checked = !!agent.autoCommit;
|
autoCommitEl.value = agent.autoCommit || '';
|
||||||
useSoulEl.checked = agent.useSoul !== false;
|
useSoulEl.checked = agent.useSoul !== false;
|
||||||
useIdentityEl.checked = agent.useIdentity !== false;
|
useIdentityEl.checked = agent.useIdentity !== false;
|
||||||
useUserInfoEl.checked = agent.useUserInfo !== false;
|
useUserInfoEl.checked = agent.useUserInfo !== false;
|
||||||
@@ -133,7 +133,7 @@ registerPage('agent', {
|
|||||||
description: descEl.value.trim(),
|
description: descEl.value.trim(),
|
||||||
model: modelEl.value,
|
model: modelEl.value,
|
||||||
toolChoice: toolChoiceEl.checked ? 'any' : 'auto',
|
toolChoice: toolChoiceEl.checked ? 'any' : 'auto',
|
||||||
autoCommit: autoCommitEl.checked,
|
autoCommit: autoCommitEl.value,
|
||||||
useSoul: useSoulEl.checked,
|
useSoul: useSoulEl.checked,
|
||||||
useIdentity: useIdentityEl.checked,
|
useIdentity: useIdentityEl.checked,
|
||||||
useUserInfo: useUserInfoEl.checked,
|
useUserInfo: useUserInfoEl.checked,
|
||||||
|
|||||||
@@ -134,7 +134,9 @@ registerPage('dashboard', {
|
|||||||
|
|
||||||
const badges = [];
|
const badges = [];
|
||||||
if (a.toolChoice === 'any') badges.push('<span class="badge badge-forced-feature" title="Tool-Nutzung erzwingen"><i class="fa fa-wrench"></i> Erzwungen</span>');
|
if (a.toolChoice === 'any') badges.push('<span class="badge badge-forced-feature" title="Tool-Nutzung erzwingen"><i class="fa fa-wrench"></i> Erzwungen</span>');
|
||||||
if (a.autoCommit) badges.push('<span class="badge badge-feature" title="Auto-Commit erlauben"><i class="fa fa-check-circle"></i> Auto-Commit</span>');
|
if (a.autoCommit === 'mention') badges.push('<span class="badge badge-feature" title="Git-Commits nur auf Anweisung"><i class="fa fa-code-fork"></i> Commit: Anmerken</span>');
|
||||||
|
if (a.autoCommit === 'enforce') badges.push('<span class="badge badge-forced-feature" title="Git-Commits nach jeder Änderung erzwungen"><i class="fa fa-code-fork"></i> Commit: Erzwungen</span>');
|
||||||
|
if (a.autoCommit === 'forbid') badges.push('<span class="badge badge-forced-feature" title="Git-Commits strikt verboten"><i class="fa fa-code-fork"></i> Commit: Verboten</span>');
|
||||||
if (a.useSoul) badges.push('<span class="badge badge-feature" title="Hat eine Seele (SOUL.md)"><i class="fa fa-heart"></i> Seele</span>');
|
if (a.useSoul) badges.push('<span class="badge badge-feature" title="Hat eine Seele (SOUL.md)"><i class="fa fa-heart"></i> Seele</span>');
|
||||||
if (a.useIdentity) badges.push('<span class="badge badge-feature" title="Hat eine Identität (IDENTITY.md)"><i class="fa fa-id-badge"></i> Ich</span>');
|
if (a.useIdentity) badges.push('<span class="badge badge-feature" title="Hat eine Identität (IDENTITY.md)"><i class="fa fa-id-badge"></i> Ich</span>');
|
||||||
if (a.useUserInfo) badges.push('<span class="badge badge-feature" title="Kennt sein Gegenüber (USER.md)"><i class="fa fa-user"></i> Du</span>');
|
if (a.useUserInfo) badges.push('<span class="badge badge-feature" title="Kennt sein Gegenüber (USER.md)"><i class="fa fa-user"></i> Du</span>');
|
||||||
|
|||||||
Reference in new issue
Block a user