fix: allow research runs to restart after stop; improve FTS search, agent limits, and timeouts

- AgentTree.restart() revives a stopped run in the same session: resets the
  root, archives old branches, and restores spawnability (stop no longer
  cancels the root).
- ResearchLoop.start() restarts from stopped/completed and resets iteration
  counters; setGoal is allowed in terminal states; supervisor 'start' revives
  the tree when the root is not spawnable.
- Cancelled/failed/archived children no longer count toward the per-agent
  child limit and archived agents are ignored by the duplicate-task guard.
- cancel() no longer overwrites an already recorded agent result.
- Add agent_timeout_seconds (default 1800) so hung agent sessions fail
  instead of blocking wait() forever.
- FTS search now prefix-matches tokens (tolerates inflections) and safely
  handles punctuation/FTS5 metacharacters instead of returning false
  negatives or throwing.
- Add tests for restart semantics, child limits, result preservation,
  agent timeouts, and FTS morphology/special characters (38/38 passing).
This commit is contained in:
Emil
2026-07-31 22:57:54 +03:00
parent 528983ee50
commit 18b8a3247d
10 changed files with 90 additions and 16 deletions
+16
View File
@@ -1,5 +1,21 @@
# Changelog
## Unreleased
- Fixed the research loop and agent tree getting permanently stuck after
`research_control stop`: `start` now restarts a stopped/completed run in the
same session (`AgentTree.restart` revives the run, archives old branches, and
resets the root), `ResearchLoop.start` resets iteration counters, and goal
changes are allowed after stop/completion.
- Cancelled/failed/archived children no longer count toward the per-agent child
limit, and archived agents are ignored by the duplicate-task guard.
- `cancel()` no longer overwrites an already recorded agent result.
- Added a per-agent execution timeout (`agent_timeout_seconds`, default 1800)
so a hung agent session fails instead of blocking `wait` forever.
- Full-text search now prefix-matches tokens (tolerates Russian/English
inflections without stemming) and safely handles punctuation and FTS5
metacharacters instead of throwing or returning false negatives.
## 0.1.1 — 2026-07-31
- Added GitHub CI, CodeQL, Dependabot, contribution/security templates, and the