feat: 升级至 v0.3.13 — 任务管理系统重构(删除 todo_write + IPC 越权防护 + UI 自动刷新)
This commit is contained in:
@@ -95,6 +95,18 @@ export function TaskList(): React.JSX.Element {
|
||||
return () => { loadReqIdRef.current++; };
|
||||
}, [sessionId, loadTasks]);
|
||||
|
||||
// P2(v0.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;
|
||||
|
||||
Reference in New Issue
Block a user