feat(mcp): delete tasks, create task lists and lists, agent badge; export/import settings category
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m21s
MindSift CI & Docker Release / Build, Test in Container & Push (push) Successful in 2m21s
New MCP tools delete_task (tasks:write), create_task_list (tasks:write) and create_list (lists:write); list_task_lists now returns the board columns so agents know the valid kanbanStatus values. Task deletion is a shared helper (deleteTask) for REST and MCP. Tasks and list items get agent_mark (migration 12): "created" when an agent adds them via MCP, "edited" when an agent changes them; a change by the user clears it. The new AgentBadge shows "KI" / "KI geändert" in task rows, Kanban cards, the task detail, the inbox and lists. Settings: export and import move out of "Webhooks, KI-Agenten & Export" into their own category "Export & Import". Docs, help, README and changelog updated; v0.29.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
8faed7a160
commit
ac068248d7
28 files changed
+441
-65
No files matched your search
@@ -20,6 +20,7 @@ import {
|
||||
} from 'lucide-react';
|
||||
import { Thought, TaskList, TaskListMember, KanbanColumn, User, Recurrence } from '../../lib/types';
|
||||
import { UserAvatar } from '../../components/UserAvatar';
|
||||
import { AgentBadge } from '../../components/AgentBadge';
|
||||
import { UserAutocomplete } from '../UserAutocomplete';
|
||||
import { api, triggerHaptic } from '../../lib/api';
|
||||
import { MarkdownViewer } from '../../lib/markdown';
|
||||
@@ -244,6 +245,7 @@ const TaskDetailModalContent: React.FC<TaskDetailModalProps & { task: Thought }>
|
||||
<span>Webhook</span>
|
||||
</span>
|
||||
)}
|
||||
<AgentBadge mark={task.agentMark} />
|
||||
</div>
|
||||
|
||||
<div className="flex items-center gap-1.5">
|
||||
|
||||
@@ -35,6 +35,7 @@ import { useKanbanTouchDrag } from './useKanbanTouchDrag';
|
||||
import { api, triggerHaptic } from '../../lib/api';
|
||||
import { UnifiedShareModal } from '../../components/UnifiedShareModal';
|
||||
import { TaskDetailModal } from './TaskDetailModal';
|
||||
import { AgentBadge } from '../../components/AgentBadge';
|
||||
import { ManageColumnsModal, DEFAULT_KANBAN_COLUMNS } from './ManageColumnsModal';
|
||||
import { AvatarStack, AvatarPerson } from '../../components/AvatarStack';
|
||||
import { CountBadge } from '../../components/CountBadge';
|
||||
@@ -287,7 +288,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
}
|
||||
} else if (msg.event === 'TASK_REORDERED') {
|
||||
loadData();
|
||||
} else if (msg.event === 'TASK_LIST_UPDATED' || msg.event === 'TASK_LIST_DELETED') {
|
||||
} else if (msg.event === 'TASK_LIST_CREATED' || msg.event === 'TASK_LIST_UPDATED' || msg.event === 'TASK_LIST_DELETED') {
|
||||
// Payload only carries the list ID; reload so permissions reflect this user's view
|
||||
api.getTaskLists().then((lists) => setTaskLists(Array.isArray(lists) ? lists : [])).catch(() => {});
|
||||
}
|
||||
@@ -1352,6 +1353,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
<span>Webhook</span>
|
||||
</span>
|
||||
)}
|
||||
<AgentBadge mark={task.agentMark} />
|
||||
|
||||
{/* Note indicator */}
|
||||
{task.notes && (
|
||||
@@ -2435,6 +2437,7 @@ export const TasksView: React.FC<TasksViewProps> = ({
|
||||
<span>Webhook</span>
|
||||
</span>
|
||||
)}
|
||||
<AgentBadge mark={task.agentMark} size="xs" />
|
||||
{task.dueDate && (
|
||||
<span
|
||||
className={`inline-flex items-center gap-0.5 text-[9px] ${!task.isCompleted && isOverdue(task.dueDate) ? 'text-status-err font-semibold' : 'text-muted'}`}
|
||||
|
||||
@@ -25,6 +25,7 @@ import {
|
||||
import { SharedList, Thought } from '../../lib/types';
|
||||
import { addDays, formatDue } from '../../lib/due';
|
||||
import { api, triggerHaptic } from '../../lib/api';
|
||||
import { AgentBadge } from '../../components/AgentBadge';
|
||||
|
||||
interface TriageDeckProps {
|
||||
deck: Thought[];
|
||||
@@ -158,6 +159,7 @@ const SwipeableQueueItem: React.FC<SwipeableQueueItemProps> = ({
|
||||
<Mic className="w-2.5 h-2.5" /> Diktat
|
||||
</span>
|
||||
)}
|
||||
<AgentBadge mark={item.agentMark} />
|
||||
</div>
|
||||
|
||||
{/* Desktop quick buttons (hidden on mobile so queue items are clean & easy to tap/swipe) */}
|
||||
@@ -521,6 +523,7 @@ export const TriageDeck: React.FC<TriageDeckProps> = ({
|
||||
<div className="flex items-center gap-1.5">
|
||||
{priorityBadge(nextCard.priority)}
|
||||
{sourceBadge(nextCard.source)}
|
||||
<AgentBadge mark={nextCard.agentMark} />
|
||||
</div>
|
||||
<p className="text-sm text-muted line-clamp-2">{nextCard.content}</p>
|
||||
<div className="text-[11px] text-faint">Nächster Quick Dump…</div>
|
||||
@@ -590,6 +593,7 @@ export const TriageDeck: React.FC<TriageDeckProps> = ({
|
||||
<div className="flex items-center gap-1.5">
|
||||
{priorityBadge(activeCard.priority)}
|
||||
{sourceBadge(activeCard.source)}
|
||||
<AgentBadge mark={activeCard.agentMark} />
|
||||
</div>
|
||||
<div
|
||||
className="flex items-center gap-2"
|
||||
|
||||
Reference in new issue
Block a user