/** * User aside — parallel work tracks (worktree-like) declared by the user. * SSOT: `.xray/state/asides/{id}.json` + `_active.json`. * Todo ids: `{asideId}.a.{phase}.{todo}` — globally unique per aside. */ import { type LeadDevPlan, type LeadDevPlanTaskInput, type LeadDevTodo } from './autonomy-kernel.js'; import { type PersistedLeadDevPlan } from './lead-dev-plan-persistence.js'; export declare const USER_ASIDE_ID_PATTERN: RegExp; /** Namespaced aside todo: `suit-nft.a.1.1` */ export declare const USER_ASIDE_TODO_PATTERN: RegExp; export declare const USER_ASIDE_STATE_VERSION: 1; export type UserAsideStatus = 'active' | 'paused' | 'completed' | 'archived'; export interface UserAsideGovernance { /** Session-boot hint to run confer before aside phase work (manual MCP — not auto confer). */ conferOnPhaseStart?: boolean; /** Repertoire trap signal names surfaced in session-boot for aside work. */ trapSignals?: string[]; } export interface UserAside { version: typeof USER_ASIDE_STATE_VERSION; id: string; title: string; status: UserAsideStatus; owner?: string; description: string; definitionOfDone?: string; worktree?: string; branch?: string; persistedAt?: string; sessionId?: string; governance?: UserAsideGovernance; plan: LeadDevPlan; } export interface ActiveAsidePointer { asideId: string; activatedAt: string; sessionId?: string; } export declare class UserAsideValidationError extends Error { constructor(message: string); } export declare function assertSafeAsideId(asideId: string): string; export declare function asideTodoId(asideId: string, phaseIndex: number, todoIndex: number): string; export declare function isUserAsideTodoId(todoId: string): boolean; export declare function parseAsideIdFromTodoId(todoId: string): string | null; export declare function userAsidesDir(projectRoot?: string): string; export declare function userAsidePath(asideId: string, projectRoot?: string): string; export declare function activeAsidePointerPath(projectRoot?: string): string; export declare function isUserAsidesEnabled(projectRoot?: string): boolean; /** Build a phased aside plan from task intake (mirrors lead-dev plan, namespaced todo ids). */ export declare function buildUserAsidePlan(asideId: string, title: string, description: string, taskInputs?: LeadDevPlanTaskInput[], mcpOverallComplexity?: number, projectRoot?: string): UserAside | null; /** Merge new task intake into an existing aside (re-intake). */ export declare function mergeUserAsideIntake(existing: UserAside, description: string, taskInputs: LeadDevPlanTaskInput[], mcpOverallComplexity?: number, projectRoot?: string): UserAside; export declare function loadUserAside(asideId: string, projectRoot?: string): UserAside | null; export declare function saveUserAside(aside: UserAside, projectRoot?: string): string; export declare function listUserAsideIds(projectRoot?: string): string[]; export declare function loadActiveAsidePointer(projectRoot?: string): ActiveAsidePointer | null; export declare function getActiveAsideId(projectRoot?: string, sessionId?: string | null): string | null; export declare function setActiveAsideId(asideId: string, projectRoot?: string, sessionId?: string | null): ActiveAsidePointer; export declare function clearActiveAside(projectRoot?: string): boolean; export declare function loadActiveUserAside(projectRoot?: string, sessionId?: string | null): UserAside | null; /** PersistedLeadDevPlan view of an aside for spawn-gate reuse. */ export declare function asideToSpawnPlan(aside: UserAside): PersistedLeadDevPlan; /** Aside routable when active for session, or pointer is unscoped (accepted exception). */ export declare function isAsideActiveForSession(asideId: string, projectRoot?: string, sessionId?: string | null): boolean; export declare function findAsideContainingTodo(todoId: string, projectRoot?: string, preferredAsideId?: string): UserAside | null; export declare function updateUserAsideTodoStatus(todoId: string, status: LeadDevTodo['status'], projectRoot?: string, sessionId?: string | null): boolean; export declare function getNextAsideTodo(aside: UserAside): LeadDevTodo | null; export declare function formatUserAsideSummary(aside: UserAside): string; export declare function getUserAsideBootHints(projectRoot?: string, sessionId?: string | null): Record | null;