feat: 升级至 v0.3.13 — 任务管理系统重构(删除 todo_write + IPC 越权防护 + UI 自动刷新)

This commit is contained in:
2026-07-21 17:01:15 +08:00
parent 058ee2de36
commit f640c9b48a
13 changed files with 114 additions and 280 deletions
+16 -2
View File
@@ -95,6 +95,18 @@ export function TaskList(): React.JSX.Element {
return () => { loadReqIdRef.current++; };
}, [sessionId, loadTasks]);
// P2v0.3.13: 订阅任务变更事件(Agent 通过 task_manager 工具写入后自动刷新)
useEffect(() => {
if (!window.metona?.tasks?.onTaskChanged) return;
const unsubscribe = window.metona.tasks.onTaskChanged((changedSessionId) => {
// 只刷新当前会话的任务
if (changedSessionId === sessionId) {
loadTasks(sessionId ?? undefined);
}
});
return unsubscribe;
}, [sessionId, loadTasks]);
const handleCreate = async () => {
if (!sessionId) {
// 用户主动操作失败应用 toast(与项目惯例一致)
@@ -132,9 +144,10 @@ export function TaskList(): React.JSX.Element {
const handleToggleComplete = async (task: MetonaTask) => {
if (!window.metona?.tasks?.update) return;
if (!sessionId) return;
const nextStatus: TaskStatus = task.status === 'completed' ? 'pending' : 'completed';
try {
const res = await window.metona.tasks.update(task.id, { status: nextStatus });
const res = await window.metona.tasks.update(task.id, { status: nextStatus }, sessionId);
if (!res.success) {
import('metona-toast').then((mod) => mod.default.error(res.error ?? '更新任务失败')).catch(() => {});
return;
@@ -147,8 +160,9 @@ export function TaskList(): React.JSX.Element {
const handleDelete = async (id: string) => {
if (!window.metona?.tasks?.delete) return;
if (!sessionId) return;
try {
const res = await window.metona.tasks.delete(id);
const res = await window.metona.tasks.delete(id, sessionId);
if (!res.success) {
import('metona-toast').then((mod) => mod.default.error(res.error ?? '删除任务失败')).catch(() => {});
return;