feat(attachments): data layer for task file attachments

TaskAttachmentEntity (+config, cascade FK), TaskAttachmentRepository, and an
AttachmentStore that writes files under ~/.todo-app/attachments/<taskId>/ with
a path-traversal guard and a 5 MB cap. TaskPromptComposer gains an optional
read-only 'Reference files' section. Migration AddTaskAttachments.
This commit is contained in:
Mika Kuns
2026-06-26 16:11:48 +02:00
parent 5231ad6b86
commit 3f9f047955
12 changed files with 1249 additions and 1 deletions
+10 -1
View File
@@ -9,7 +9,8 @@ namespace ClaudeDo.Data;
/// </summary>
public static class TaskPromptComposer
{
public static string Compose(string title, string? description, IEnumerable<(string Title, bool Completed)> subtasks)
public static string Compose(string title, string? description, IEnumerable<(string Title, bool Completed)> subtasks,
IEnumerable<string>? attachmentPaths = null)
{
var sb = new StringBuilder((title ?? "").Trim());
@@ -24,6 +25,14 @@ public static class TaskPromptComposer
sb.Append("- [ ] ").Append(s.Title).Append('\n');
}
var paths = attachmentPaths?.ToList();
if (paths is { Count: > 0 })
{
sb.Append("\n\n## Reference files\nThese files were attached to this task as read-only reference (they live outside the repo). Read them as needed:\n");
foreach (var p in paths)
sb.Append("- ").Append(p).Append('\n');
}
return sb.ToString();
}
}