Ablage je Einheit, Stufe 1: benannte Arbeitsbereiche mit Mitgliedern (#684)
- WorkspaceConfig in der Instanzkonfiguration: Id, Name, Zweck, Eigentuemer-Einheit, Mitglieder (Einheit oder Agent, Stufe Read/Write/ Manage, Untereinheiten ein/aus), geschuetzte Pfade. Das Recht steht am Bereich, nicht am Agenten. - OrgChart: AccessTo, WorkspacesFor, UnitWorkspace; Problems nennt ungueltige Ids und tote Verweise. WorkspaceLayout: Bereiche liegen unter Agents/SharedWorkspaces/<id>/, neben dem unveraenderten SharedWorkspace. - FileRW: workspace ist ein Name - personal, shared (wie bisher ueber sharedAccessLevel), unit (eigene Einheit) oder eine Bereichs-Id. Ein unbekannter und ein nicht erlaubter Bereich bekommen dieselbe Antwort. Loeschen braucht Manage wie frueher Admin. Der #662-Hinweis sucht in allen erlaubten Bereichen. - Mit Einheiten ist shared:/tasks/ fuer FileRW gesperrt: Aufgaben laufen ueber das Brett, sonst umginge eine direkt geschriebene Datei Brett- und Adressbuchpruefung. Ohne Einheiten unveraendert. - Organisationsabschnitt im Prompt nennt die Bereiche mit Stufe und Zweck. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
ba5fe4cdf7
commit
ff20ce2563
@@ -98,10 +98,42 @@ public static class OrgBriefing
|
||||
sb.AppendLine($"- {Name(contact)}{Describe(contact.Description)}");
|
||||
}
|
||||
|
||||
AppendWorkspaces(sb, org, agentId);
|
||||
|
||||
sb.Append("Agents not named here cannot be reached from your position — go through your lead.");
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// #684: The shared workspaces the agent may use. FileRW's own description cannot name
|
||||
/// them — it is the same for every agent — so they are listed here, where the agent's
|
||||
/// position is described anyway, and change with it when it moves.
|
||||
/// </summary>
|
||||
private static void AppendWorkspaces(StringBuilder sb, OrgChart org, string agentId)
|
||||
{
|
||||
var grants = org.WorkspacesFor(agentId);
|
||||
if (grants.Count == 0)
|
||||
return;
|
||||
|
||||
sb.AppendLine("Your shared workspaces (FileRW, parameter \"workspace\"):");
|
||||
foreach (var grant in grants)
|
||||
{
|
||||
var workspace = grant.Workspace;
|
||||
var name = grant.IsOwnUnit
|
||||
? $"\"{WorkspaceLayout.Unit}\" — your unit's workspace (also \"{workspace.Id}\")"
|
||||
: $"\"{workspace.Id}\"" + (string.IsNullOrWhiteSpace(workspace.Name) || workspace.Name == workspace.Id ? "" : $" ({workspace.Name})");
|
||||
var access = grant.Access switch
|
||||
{
|
||||
Config.WorkspaceAccess.Read => "read only",
|
||||
Config.WorkspaceAccess.Write => "read and write",
|
||||
_ => "read, write and delete"
|
||||
};
|
||||
sb.AppendLine($"- {name}, {access}{Describe(workspace.Purpose)}");
|
||||
}
|
||||
if (grants.Any(g => g.IsOwnUnit))
|
||||
sb.AppendLine("What your unit works on belongs in \"unit\", where your colleagues find it; \"personal\" is yours alone.");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Replaces the organisation section of a system prompt, appends it, or removes it —
|
||||
/// leaving everything before it untouched. Existing chat contexts keep their system
|
||||
|
||||
Reference in New Issue
Block a user