SIGN IN SIGN UP

fix: [ENG-2925] route CLI curate through daemon so it shows in Task queue

`brv curate <intent>` (tool-mode session protocol) wrote the topic file
in-process and bypassed the daemon's TaskRouter, so no TaskHistoryEntry
was ever persisted and the curate was invisible to the WebUI Tasks
panel — even though the MCP `brv-curate` tool already routed through
`curate-html-direct` and showed up. continueSession now dispatches the
same `curate-html-direct` task type as MCP; TaskRouter's lifecycle
hooks persist the entry automatically, so every CLI curate appears
under the existing `curate` filter (curate-html-direct already
flattens to `curate` in the WebUI). Free side effect: CLI curates
become cancellable from any surface the daemon supports.

Wire payload extended with optional `userIntent` so the row title
shows the user's prompt instead of the raw `<bv-topic>` JSON blob;
MCP omits the field and falls back to the bv-topic path attribute.
TaskInfo schema unchanged — the WebUI decodes userIntent at render
time via a helper that the list row and detail header both use.

Session state, retry-cap loop (MAX_ATTEMPTS=4), and SESSION_ID
path-traversal guard stay CLI-side. The in-process writeHtmlTopic /
curate-log / review-backup / sidecar-bump / index-regen block is
removed — daemon's case 'curate-html-direct' already does all of it.

Unit tests rewritten around a mock ITransportClient (capture the
`task:create` payload + simulate `task:completed`); new integration
test exercises a real TaskRouter + FileTaskHistoryStore round-trip
and asserts the entry surfaces in task:list with userIntent.
C
Cuong committed
2eb391e9785a3d9af0804d082d02fddff2005f51
Parent: 8edf54a