Adds three new stage executor kinds to the pipeline engine:
- `command`: shell-based stages parsed via stdout JSON/JSONL. Refuses
fork PRs unless the stage opts in via Stage.allowFork; the refusal is
surfaced as a STAGE_FAILED with the documented message. Not
talk-to-able (per locked decision 10).
- `builtin/router`: replaces the original SEND_TO_AGENT reducer command;
reads upstream findings, formats a payload, and delivers it to a
target session via BuiltinTaskContext.sendToSession.
- `builtin/compose`: merges findings from multiple upstream stages into
a single composite json artifact for downstream consumption.
Other surface changes:
- PRInfo gains `isFromFork: boolean`; scm-github and scm-gitlab populate
it from `isCrossRepository` / source-vs-target project ids.
- Stage gains optional `allowFork` flag.
- New BuiltinTaskContext interface exposes only the capabilities
builtins need (readSiblingArtifacts, sendToSession).
- Shared findings-parser extracted from agent.ts so command + agent
stages validate ArtifactInput records the same way.
- Engine dispatches START_STAGE by executor kind; missing
command/builtin executors fail the stage with a clear error rather
than hanging.
Closes#1631