Der Konversationskontext _chatContexts[agentId] ist eine geteilte List<ChatMessage>. Nur der Lookup lief unter Lock, alle Add-Aufrufe im Schleifenkoerper waren ungeschuetzt. Da WebView, ToolJob-Wakeups und AgentComm denselben Agenten gleichzeitig ansprechen koennen, verschraenkten sich ihre Nachrichten zu einer ungueltigen Tool-Sequenz, die die API mit HTTP 400 ablehnt. ChatAsync laeuft jetzt hinter einem SemaphoreSlim(1,1) pro Agent; verschiedene Agenten bleiben unabhaengig. Die Timeout-Uhr startet erst nach dem Eintritt, damit Wartezeit in der Warteschlange den Lauf nicht aufzehrt. Zwei Folgeprobleme mit demselben Ursprung: - _runningChats hielt nur EINE CancellationTokenSource je Agent; der zweite Lauf ueberschrieb den ersten. AbortChat brach dadurch nur einen ab, der andere lief bis ins Run-Timeout. Jetzt eine Liste, die auch wartende Laeufe erfasst. - ExecuteToolCallAsync fing OperationCanceledException mit ab und gab sie als Tool-Ergebnis zurueck, wodurch der Abbruch erst einen Schritt spaeter griff. Cancellation wird nun durchgereicht. Ausserdem: send_message an den eigenen Agenten wird abgelehnt — es waere mit dem neuen Gate in einen Deadlock gelaufen. Neu: GetChatContext(agentId) als Momentaufnahme des Kontexts, fuer Diagnose und Kontextgroessen-Anzeige. Build-Fix: Das WinForms-Projekt globbt **/*.cs und kompilierte dadurch die Test-Quellen mit. tests\** wird jetzt wie src\** ausgeschlossen. Alle 49 Tests gruen. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
111 lines
5.0 KiB
XML
111 lines
5.0 KiB
XML
<Project Sdk="Microsoft.NET.Sdk">
|
|
|
|
<PropertyGroup>
|
|
<OutputType>WinExe</OutputType>
|
|
<TargetFramework>net10.0-windows</TargetFramework>
|
|
<Nullable>enable</Nullable>
|
|
<UseWindowsForms>true</UseWindowsForms>
|
|
<ImplicitUsings>enable</ImplicitUsings>
|
|
<RootNamespace>ClawdDotNet</RootNamespace>
|
|
<ApplicationIcon>Martin-Berube-Flat-Animal-Crab.ico</ApplicationIcon>
|
|
|
|
<!-- ── Sauberes Build-Verzeichnis ── -->
|
|
<!-- Nur deutsche + englische Satelliten-Assemblies (Sprachpakete) ausgeben -->
|
|
<SatelliteResourceLanguages>de;en</SatelliteResourceLanguages>
|
|
<!-- Keine XML-Dokumentationsdateien von NuGet-Paketen kopieren -->
|
|
<PublishDocumentationFiles>false</PublishDocumentationFiles>
|
|
<!-- PDB-Dateien nur im Debug-Build ausgeben -->
|
|
<DebugSymbols Condition="'$(Configuration)' == 'Release'">false</DebugSymbols>
|
|
<CopyOutputSymbolsToOutputDirectory Condition="'$(Configuration)' == 'Release'">false</CopyOutputSymbolsToOutputDirectory>
|
|
</PropertyGroup>
|
|
|
|
<!-- Unterordner mit eigenen Projekten aus dem Glob des Hauptprojekts nehmen.
|
|
Ohne das kompiliert die WinForms-App die Test-Quellen mit. -->
|
|
<ItemGroup>
|
|
<Compile Remove="src\**" />
|
|
<None Remove="src\**" />
|
|
<EmbeddedResource Remove="src\**" />
|
|
<Compile Remove="tests\**" />
|
|
<None Remove="tests\**" />
|
|
<EmbeddedResource Remove="tests\**" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<PackageReference Include="Microsoft.Web.WebView2" Version="1.0.3967.48" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<EmbeddedResource Include="EmbeddedUI\**\*" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Content Include="Martin-Berube-Flat-Animal-Crab.ico" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<ProjectReference Include="src\ClawdDotNet.Core\ClawdDotNet.Core.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.FileRW\ClawdDotNet.Tools.FileRW.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.Telegram\ClawdDotNet.Tools.Telegram.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.Mail\ClawdDotNet.Tools.Mail.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.Database\ClawdDotNet.Tools.Database.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.FTP\ClawdDotNet.Tools.FTP.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.DirectAPI\ClawdDotNet.Tools.DirectAPI.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.WebFetch\ClawdDotNet.Tools.WebFetch.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.WebMonitor\ClawdDotNet.Tools.WebMonitor.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.AgentComm\ClawdDotNet.Tools.AgentComm.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.AgentSpawn\ClawdDotNet.Tools.AgentSpawn.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.SocialMediaManager\ClawdDotNet.Tools.SocialMediaManager.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.AgentEditor\ClawdDotNet.Tools.AgentEditor.csproj" />
|
|
<ProjectReference Include="src\ClawdDotNet.Tools.TelegramClient\ClawdDotNet.Tools.TelegramClient.csproj" />
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<Compile Update="Properties\Resources.Designer.cs">
|
|
<DesignTime>True</DesignTime>
|
|
<AutoGen>True</AutoGen>
|
|
<DependentUpon>Resources.resx</DependentUpon>
|
|
</Compile>
|
|
</ItemGroup>
|
|
|
|
<ItemGroup>
|
|
<EmbeddedResource Update="Properties\Resources.resx">
|
|
<Generator>ResXFileCodeGenerator</Generator>
|
|
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
|
</EmbeddedResource>
|
|
</ItemGroup>
|
|
|
|
<!-- ═══════════════════════════════════════════════
|
|
Sauberes Programmverzeichnis
|
|
═══════════════════════════════════════════════ -->
|
|
|
|
<!-- XML-Dokumentation von NuGet-Paketen nicht ins Build-Verzeichnis kopieren -->
|
|
<Target Name="RemoveNuGetXmlDocs" AfterTargets="ResolveReferences">
|
|
<ItemGroup>
|
|
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)"
|
|
Condition="'%(Extension)' == '.xml'" />
|
|
</ItemGroup>
|
|
</Target>
|
|
|
|
<!-- WebView2-WPF-Assemblies entfernen (nur WinForms wird verwendet) -->
|
|
<Target Name="RemoveWebView2Wpf" AfterTargets="ResolveReferences">
|
|
<ItemGroup>
|
|
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)"
|
|
Condition="$([System.String]::Copy('%(Filename)').Contains('WebView2.Wpf'))" />
|
|
</ItemGroup>
|
|
</Target>
|
|
|
|
<!-- Arbeitsordner (tools/, Logs/, Instances/) anlegen -->
|
|
<Target Name="CreateWorkingDirectories" AfterTargets="Build">
|
|
<MakeDir Directories="$(OutputPath)tools" />
|
|
<MakeDir Directories="$(OutputPath)Logs" />
|
|
<MakeDir Directories="$(OutputPath)Instances" />
|
|
</Target>
|
|
|
|
<Target Name="CreatePublishDirectories" AfterTargets="Publish">
|
|
<MakeDir Directories="$(PublishDir)tools" />
|
|
<MakeDir Directories="$(PublishDir)Logs" />
|
|
<MakeDir Directories="$(PublishDir)Instances" />
|
|
</Target>
|
|
|
|
</Project>
|