/// Represents a task or topic the user wants to discuss with the agent. class Task { final String id; final Map? additionalInput; final List? artifacts; String _title; Task({ required this.id, this.additionalInput, this.artifacts, required String title, }) : assert(title.isNotEmpty, 'Title cannot be empty'), _title = title; String get title => _title; set title(String newTitle) { if (newTitle.isNotEmpty) { _title = newTitle; } else { throw ArgumentError('Title cannot be empty.'); } } // Convert a Map (usually from JSON) to a Task object factory Task.fromMap(Map map) { Map? additionalInput; List? artifacts; if (map['additional_input'] != null) { additionalInput = Map.from(map['additional_input']); } if (map['artifacts'] != null) { artifacts = List.from(map['artifacts'].map((e) => e.toString())); } return Task( id: map['task_id'], additionalInput: additionalInput, artifacts: artifacts, title: map['input'], ); } Map toJson() { return { 'task_id': id, 'input': title, 'additional_input': additionalInput, 'artifacts': artifacts, }; } @override bool operator ==(Object other) => identical(this, other) || other is Task && runtimeType == other.runtimeType && id == other.id; @override int get hashCode => id.hashCode ^ title.hashCode; @override String toString() => 'Task(id: $id, title: $title)'; }