/** UTC day bucket, `YYYY-MM-DD`. */ export declare const dayKey: (at?: Date) => string; export declare type DevActivityOutcome = /** Nothing to do: not logged in, or already reported today. */ { readonly kind: 'skipped'; readonly reason: 'no-credentials' | 'already-reported'; } /** Delivered. `seat` is what the ledger did. */ | { readonly kind: 'reported'; readonly seat: 'claimed' | 'refreshed' | 'unchanged'; } /** Could not reach the control plane; the day is queued for a later run. */ | { readonly kind: 'deferred'; readonly error: string; } /** The credential belongs to no person — the caller must refuse to continue. */ | { readonly kind: 'not-personal'; readonly message: string; }; /** Where the debounce state lives. Beside the credentials, and overridable by * the same env var pattern so tests never touch a real home directory. */ export declare const devActivityStatePath: () => string; /** * Report today's activity, flushing anything queued from earlier failures. * * Returns an outcome rather than throwing. Callers that want the hard gate * (interactive development) act on `not-personal`; everything else is * informational and safe to ignore entirely. */ export declare const reportDevActivity: (input?: ReportInput) => Promise; declare interface ReportInput { readonly project?: string | undefined; readonly cliVersion?: string | undefined; /** Report even if today was already reported. Used by tests. */ readonly force?: boolean; } export { } declare module '@voltro/protocol' { interface VoltroTableNames { 'tasks': true; 'task_sub_tasks': true; '_voltro_workflow_runs': true; '_voltro_workflow_run_steps': true; '_voltro_workflow_run_events': true; '_voltro_workflow_events': true; '_voltro_workflow_event_deliveries': true; '_voltro_approvals': true; '_voltro_connections': true; '_voltro_undo_log': true; } } declare module '@voltro/protocol' { interface VoltroTableNames { 'invoices': true; 'invoice_lines': true; } }