fe7a5c481e
Working memory (Memory module's first real code): - MemoryEntry (schema "memory", vector(384), InitialMemory migration); TeamMemory implements the SharedKernel ITeamMemory seam (embed-and-store on write, cosine recall on read); GET /api/memory/search. HashingTextEmbedder promoted to SharedKernel (pure, deterministic; swapped for ONNX/BYOK embedders later behind ITextEmbedder). - Written on approval: Governance's approve stores an Approval/Correction entry per decision. - Read at assembly: the executor recalls the team's top-3 relevant entries; the prompt gains a "# Team memory" section (treated as data, not instructions). The single V1 event trigger: - IAgentDispatcher (SharedKernel) implemented by Assembler's AgentRunDispatcher (shared by the API and triggers). OrgBoard's QaHandoffTrigger: a task hitting done creates a QA task (provenance parent, assigned to the QA agent) and dispatches a run for the team's QA AI seat. Guardrails: Test/Review tasks never re-trigger (no self-cascade) and a task hands off at most once. Audited as handoff.triggered. Analytics — the V1 verdict view: - IBoardStats (SharedKernel) implemented by OrgBoard; GET /api/governance/analytics returns approval rate, avg edit distance, per-agent metrics + edit-distance trend, tasks done. - UI: /analytics — stat cards, per-agent table, recharts edit-distance trend per agent. Verified: build green; ArchitectureTests 8/8; IntegrationTests 42/42 incl. the M6 acceptance end to end — a dev marks a story done → Quill wakes via the handoff (QA task with provenance, assigned to the agent) → drafts a test plan that waits in review → approve records the second agent's edit distance → analytics show approval rate 100%, avg edit distance > 0, and trends for BOTH Aria and Quill; memory written on Aria's corrected approval is recalled into her next prompt; the guardrails hold. Client build green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
32 lines
878 B
C#
32 lines
878 B
C#
namespace TeamUp.SharedKernel.Ai;
|
|
|
|
public enum MemoryKind
|
|
{
|
|
Decision,
|
|
Approval,
|
|
Correction,
|
|
}
|
|
|
|
public sealed record MemoryHit(Guid Id, MemoryKind Kind, string Content, DateTimeOffset CreatedAtUtc);
|
|
|
|
/// <summary>
|
|
/// Team-scoped working memory: written when a human approves (or corrects) agent work, read at
|
|
/// prompt assembly via pgvector similarity. Implemented by the Memory module. Strictly isolated
|
|
/// per team — institutional knowledge is the moat.
|
|
/// </summary>
|
|
public interface ITeamMemory
|
|
{
|
|
Task WriteAsync(
|
|
Guid teamId,
|
|
MemoryKind kind,
|
|
string content,
|
|
Guid? sourceReviewItemId = null,
|
|
CancellationToken cancellationToken = default);
|
|
|
|
Task<IReadOnlyList<MemoryHit>> SearchAsync(
|
|
Guid teamId,
|
|
string query,
|
|
int take = 3,
|
|
CancellationToken cancellationToken = default);
|
|
}
|