Replace abort-based session cycling with MCP custom tools (cycle_status, complete_cycle) that allow agents to decide when to cycle based on context pressure. Implement a ContentIngestionRunner for sequential file-by-file content ingestion with SQLite progress tracking, content hash deduplication, and cancellation support, along with StorylineRoutes for HTTP API.
**Type:** feature / enhancement request (re-filed from maintainer's own PR during backlog cleanup) ## Summary - **Cooperative cycling**: Replace abort-based session cycling with MCP custom tools (`cycle_status`, `complete_cycle`) that let the agent decide when to cycle based on context pressure - **ContentIngestionRunner**: Sequential file-by-file content ingestion orchestrator with SQLite progress tracking, content hash dedup, and cancellation support - **StorylineRoutes**: HTTP API (`POST /run`, `GET /status`, `POST /cancel`) for the Storyline skill to drive content ingestion from the engine ### New files | File | Purpose | |------|---------| | `EndlessModeToolServer.ts` | MCP tool server with `cycle_status` and `complete_cycle` for cooperative cycling | | `ContentIngestionRunner.ts` | File-by-file ingestion orchestrator with observer pipeline integration | | `StorylineRepository.ts` | SQLite CRUD for `storyline_runs` and `storyline_files` tables | | `StorylineRoutes.ts` | Express