O estado é gravado no disco, sobrevivendo à compactação
「State that survives compression — because it's outside the conversation.」
Qual é a diferença entre TodoWrite e Tarefa?
OTodoManager do s03 também pode listar tarefas - mas é armazenado na memória. Assim que o auto_compact mencionado em s06 é acionado, as mensagens[] são substituídas por resumo e o status do TodoManager é desaparecido (porque está na memória).
ATarefa de s07 é diferente: cada tarefa é um arquivo .tasks/task_42.json. Quer o contexto seja compactado, o processo seja reiniciado ou o agente seja substituído - enquanto o arquivo em disco ainda existir, a tarefa ainda existirá.
#.tasks/task_12.json { "id": 12, "subject": "Refatorar middleware de autenticação", "descrição": "Extrair lógica JWT para módulo compartilhado", "status": "pendente", "blockedBy": [8, 11], # Deve completar #8 e #11 "proprietário": "" }Regras de seleção: Usetodopara tarefas temporárias (esqueça quando terminar); usetaskpara tarefas persistentes (mantidas entre sessões e dependentes).bloqueadoBy · Temperamento do gráfico de dependência
blockedByé uma lista de IDs de tarefas - elas devem serconcluídasantes que a tarefa atual seja "executável".A implementação do s07 tem um detalhe interessante: Quando uma tarefa é concluída, ela será automaticamente removida da lista BlockedBy de todas as outras tarefas.
def _clear_dependency(self, complete_id: int): # Verifique todas as tarefas, remova o complete_id do bloqueadoBy para f em self.dir.glob("task_*.json"): tarefa = json.loads(f.read_text()) se complete_id em task.get("blockedBy", []): tarefa["blockedBy"].remove(completed_id) self._save(task)Dessa forma, o agente não precisa manter uma tabela separada "quais tarefas estão desbloqueadas" - basta percorrer
.tasks/e encontrarstatus=="pending" e notblockByque agora são executáveis.Interação do gráfico de dependência
O widget abaixo fornece um gráfico de dependência de 5 tarefas. Clique em “concluir” para ver o BlockBy atualizado automaticamente e quais tarefas se tornam “executáveis” (destacadas em verde).
Ele ainda pode sobreviver depois de ser compactado?
s06 mencionou que auto_compact substituirá messages[] por um resumo. Mas a tarefa não é afetada porque está no disco. Teste: deixe o agente realizar 5 tarefas. Depois de compactar o diálogo, ele verifica
.tasks/e pode continuar onde estava.