export {
  ESTIMATE_LABELS,
  PRIORITY_LABELS,
  HARD_DEADLINE_LABEL,
  extractLabelFacts,
  isCommiteaLabel,
  parseEstimateLabel,
  parsePriorityLabel,
} from './labels/label-schema.js'
export type { EstimateLabel, LabelFacts, PriorityLabel } from './labels/label-schema.js'

export { createGiteaClient, normalizeIssue, normalizeMilestone, normalizeTimeline } from './gitea/client.js'
export type { GiteaClient, ListIssuesOptions } from './gitea/client.js'
export { GiteaApiError } from './gitea/types.js'
export type {
  FetchLike,
  GiteaConfig,
  GiteaHttpResponse,
  GiteaIssue,
  GiteaLabel,
  GiteaMilestone,
  GiteaMilestoneRef,
  GiteaRequestInit,
} from './gitea/types.js'

export { describeChange, planIssueChange, proposalsFor } from './changes/apply-changes-v0.js'
export type { ChangeProposal, IssueChange, LabelPlan, ProposeChangeArgs } from './changes/apply-changes-v0.js'

export {
  inferColumnV0,
  inferLifecycle,
  LIFECYCLE_COLUMNS,
  workingDaysBetween,
} from './lifecycle/lifecycle-v0.js'
export type {
  LifecycleColumn,
  LifecycleEvent,
  LifecycleEventType,
  LifecycleInference,
  LifecycleStages,
} from './lifecycle/lifecycle-v0.js'

export { DEFAULT_ESTIMATE_DAYS, schedule, selectFocus } from './scheduler/scheduler-v0.js'
export type {
  DependencyEdge,
  Focus,
  SchedulableIssue,
  ScheduledItem,
  SchedulePlan,
} from './scheduler/scheduler-v0.js'

export {
  COLD_START_PRIORS,
  durationParams,
  forecast,
  nearestBucket,
  PRIOR_BUCKETS,
  priorForEstimate,
} from './forecast/forecast-v0.js'
export type {
  BurnUpPoint,
  DurationModel,
  Forecast,
  ForecastOptions,
  LognormalPrior,
} from './forecast/forecast-v0.js'

export {
  CALIBRATION_BUCKET_FLOOR,
  calibrationSamples,
  COLD_START_THRESHOLD,
  fitCalibration,
  toDurationModel,
} from './calibration/calibration-v0.js'
export type {
  BucketFit,
  CalibrationModel,
  CalibrationSample,
  PersonBias,
} from './calibration/calibration-v0.js'

export { createChatClient } from './agent/chat-client.js'
export type { ChatClient, ChatMessage, CompletionResult, ModelConfig, ToolCall, ToolDecl } from './agent/chat-client.js'
export { pickModel } from './agent/model-router.js'
export type { ModelRouter, TaskKind } from './agent/model-router.js'
export { runAgentTurn } from './agent/agent-loop.js'
export type { AgentStep, AgentTurn, ToolExecutor } from './agent/agent-loop.js'
export {
  PROPOSE_CHANGE_TOOL,
  QUERY_PROJECT_TOOL,
  RECORD_DIRECTIVE_TOOL,
  REGINALD_SYSTEM,
  REGINALD_TOOLS,
} from './agent/agent-tools.js'
export { buildProjectView } from './agent/query-project.js'
export type { ProjectSnapshot, ProjectView, QueryFilters } from './agent/query-project.js'
export { CAPTURE_SYSTEM, captureWork, parseCaptureArgs, PROPOSE_ISSUES_TOOL } from './agent/capture-work.js'
export type { CaptureProposal, ProposedIssue } from './agent/capture-work.js'

export {
  appendDirective,
  makeDirectiveEntry,
  parseDirectiveLog,
  serializeDirective,
  toDirectiveInput,
} from './directives/record-directive-v0.js'
export type {
  DirectiveEntry,
  DirectiveInput,
  DirectiveKind,
  DirectiveRecord,
  DirectiveStatus,
  DirectiveTarget,
} from './directives/record-directive-v0.js'
