/** * Personal Ops lane descriptor for the writing-style-matched draft-reply flow. * * NOT SHIPPED / NOT WIRED (capability-honesty, 2026-07) * ────────────────────────────────────────────────────────────────────── * These descriptors are intentionally NOT wired into the advertised Personal * Ops inbox lane. The Agent has no reader for the user's own sent-message * corpus, so it cannot honestly claim a writing-style match, and the * competitive feature inventory records writing-style-matched draft replies as * "not yet shipped". The pure composer (style-reply.ts) and these descriptors * stay as tested internal code for when the sent-corpus input and a real * compose route ship together. Do not re-add buildStyleReplyLaneAdditions to * the surface's buildLanes() until then. * * This module defines the workflow and live-record objects that would surface * the style-reply capability inside the Personal Ops 'inbox' lane once the * capability is genuinely shipped. * * ── Why the return types are inferred ───────────────────────────────────── * * Personal Ops is a product SURFACE concept: the `PersonalOpsWorkflow` and * `PersonalOpsLiveRecord` types live in the surface that renders the lane, and * re-declaring them here would put a second copy of a product's type system in * the SDK for it to drift from. So these functions return exactly the object * literals they build, and the surface pins them to its own types at the point * of use, where a mismatch becomes a compile error in the product, which is * where it belongs. The literal annotations below exist so that pinning * succeeds: without them the union-valued fields widen to `string`. * * BEFORE-SEND REVIEW BOUNDARY (enforced here and in style-reply.ts) * ────────────────────────────────────────────────────────────────────── * The style-reply lane ONLY produces a DRAFT. Composition is local-only in * nature (the live record's typed `effect` is 'read-only', the closest value * in the surface's live-record effect union, and it carries no `freshness`, so * it is never counted as a provider read). Sending requires the confirmed send path * (EmailService.sendMail with confirm:true, or an MCP connector action) with * explicit user review and confirmation before any provider effect is executed. * * The confirmationRequired flag on the send follow-up route is always true. * Auto-send is architecturally impossible from this module. * * INTEGRATION * ──────────── * A surface consumes this from its Personal Ops lane builder. Registering a new * top-level harness mode for it is a separate decision made in that surface's * mode catalog; nothing here registers one. */ /** * Determine the workflow status for the style-reply lane. * * The lane is 'ready' when at least one email connector or daemon method is * available (signalled by hasEmailCapability = true). Otherwise 'needs-setup'. */ export declare function styleReplyWorkflowStatus(hasEmailCapability: boolean): 'ready' | 'needs-setup'; /** * Personal Ops workflow card for the writing-style-matched draft-reply flow. * * Presence in inbox lane's `workflows` array makes it discoverable via * `personal_ops action:"intake" query:"draft reply in my style"` and similar. */ export declare function styleReplyWorkflow(hasEmailCapability: boolean): { id: string; label: string; status: "ready" | "needs-setup"; summary: string; next: string; modelRoute: string; inspectRoutes: string[]; prerequisites: string[]; runBoundary: string; }; /** * Live record for the inbox lane's liveRecords array that exposes the * style-reply composer as a Personal Ops read route. * * The `effect` is 'read-only' (the local composer performs no provider write); * it carries no `freshness` so it is not counted as a provider read. Send is a * separate confirmed route. */ export declare function styleReplyLiveRecord(hasEmailCapability: boolean): { id: string; label: string; status: string; summary: string; userRoute: string; modelRoute: string; tags: string[]; effect: "read-only"; capability: string; confirmationRequired: boolean; requiredFields: string[]; optionalFields: string[]; sampleInput: { inboundFrom: string; inboundSubject: string; inboundBodyPreview: string; context: string; }; followUpRoutes: { id: string; label: string; effect: "confirmed-effect"; modelRoute: string; requiresConfirmation: boolean; policy: string; }[]; }; export interface StyleReplyLaneAdditions { readonly workflow: ReturnType; readonly liveRecord: ReturnType; } /** * Returns both the workflow and live record for the style-reply lane. * Call once per buildLanes() invocation; result is deterministic. */ export declare function buildStyleReplyLaneAdditions(hasEmailCapability: boolean): StyleReplyLaneAdditions; //# sourceMappingURL=style-reply-lane.d.ts.map