Releases: javiergs/TULIP
Taiga Support - Now retrieve Sprints and User Stories by Sprint
This release adds support for working with sprints (milestones) in Taiga
New Features
- Retrieve project sprints
- Added a method to obtain all sprints associated with a project.
- Uses the Taiga API endpoint /api/v1/milestones.
- Retrieve user stories by sprint
- Added a method to obtain all user stories belonging to a specific sprint.
- Uses the Taiga API endpoint /api/v1/userstories?milestone=.
API Additions
New methods in TaigaClient:
List<TaigaSprint> getSprints(long projectId)
List<TaigaUserStory> getStoriesBySprint(long sprintId)
Purpose
These additions enable applications using TULIP to:
• Navigate the project → sprint → story hierarchy
• Retrieve sprint planning information
• Build sprint dashboards or progress views
• Integrate Taiga sprint data into external tools
Example Usage
TaigaClient client = new TaigaClient(token);
List<TaigaSprint> sprints = client.getSprints(projectId);
for (TaigaSprint sprint : sprints) {
List<TaigaUserStory> stories = client.getStoriesBySprint(sprint.getId());
}
Notes
In Taiga, sprints are represented as milestones, and the new functionality exposes this concept directly through the TULIP API.
A Lexer Module for Compiler Construction
This release introduces a Lexical Analyzer (Lexer) component, designed to support projects in compiler construction
and programming language processing.
The lexer module provides functionality to scan input source code and convert it into a stream of tokens, which can then be consumed by a parser or other language processing tools.
New Package
tulip.compiler
The new lexer module allows applications to:
- Read source code from text input
- Identify lexical elements such as:
- identifiers
- keywords
- numbers
- operators
- delimiters
- Produce a structured stream of tokens for use in parsing stages
- Support experimentation with language design and compiler
construction
Example Usage
Lexer lexer = new Lexer(sourceCode);
lexer.run();
Vector<Token> tokens = lexer.getTokens();
for (Token token : tokens) {
System.out.println(token);
}Adding RTDE Support for Universal Robots e-Series
New Feature: Universal Robots RTDE Client
This release introduces Real-Time Data Exchange (RTDE) support in the TULIP library, enabling applications to access real-time data from Universal Robots e-Series collaborative robots.
The RTDE client allows developers to connect to a robot controller and retrieve streaming data such as:
- Joint positions
- TCP position and orientation
- Robot state variables
- Digital and analog I/O
- Runtime information from the robot controller
New Package
tulip.ur.rtde
This package provides classes responsible for:
- RTDE protocol negotiation
- Output variable configuration
- Binary data parsing
- Continuous robot telemetry streaming
Capabilities
The RTDE integration enables applications built with TULIP to:
- Connect to a Universal Robots e-Series controller
- Subscribe to real-time robot telemetry
- Retrieve robot state information at runtime
- Support robotics experimentation and teaching scenarios
Example Usage
RTDEClient rtde = new RTDEClient("192.168.0.10");
rtde.connect();
RobotState state = rtde.read();
System.out.println("Joint 1 position: " + state.getJointPosition(0));
System.out.println("TCP X position: " + state.getTcpX());Purpose
This addition expands TULIP beyond software project management and AI integrations by introducing robotics connectivity capabilities.
With this update, TULIP now supports applications that combine:
- GitHub repositories
- Taiga project management
- AI services (Groq)
- Real-time robotic systems (Universal Robots RTDE)
These capabilities make TULIP a versatile framework for software engineering education, robotics experimentation, and research prototypes involving intelligent systems and human-robot interaction.
Adding Groq API client
New Features
- Added Groq API client support to the TULIP library.
- New package: tulip.groq
Includes:
- GroqClient – main interface for interacting with the Groq API
- GroqConfig – configuration class for API key, base URL, and model
- GroqMessage – simple message object used for chat interactions
Capabilities
The Groq client supports:
- Chat completions using Groq LLMs
- Single prompt requests
- Multi-message conversations
- Configurable parameters (model, temperature, max tokens)
Example Usage
GroqConfig cfg = new GroqConfig(apiKey, baseUrl, model);
GroqClient groq = new GroqClient(cfg);
String answer = groq.chat("Explain the pipeline pattern in software engineering.");
Configuration
GROQ_API_KEY
GROQ_BASE_URL=https://api.groq.com/openai/v1
GROQ_MODEL=llama-3.3-70b-versatile
Purpose
This release extends TULIP to support AI-assisted features via Groq,
complementing the existing integrations with GitHub and Taiga.
Adding Taiga Client Integration
This update introduces support for Taiga.IO integration.
Previously, TULIP provided functionality only for interacting with the GitHub API. The library now includes a Taiga client module that allows applications to retrieve and interact with project data stored in Taiga. The new Taiga client provides methods to authenticate with the Taiga REST API and retrieve core project management entities, including:
Projects
Sprints (Milestones)
User Stories
Tasks
This addition enables TULIP to interact with both code repositories (GitHub) and project management platforms (Taiga).
v3.0
This release introduces a major upgrades
🚀 Highlights
Unified GitHub URL Parser
A single method now correctly handles:
- Plain repo URLs
- /tree/{branch}/{path}
- /blob/{branch}/{path}
- URLs missing branch/path (defaults to main)
Enhanced URLObject
- New isBlob() and isDirectory() helpers
- Cleaner structure for owner, repository, revision, path, and kind
- Improved debugging output
GitHub Token Auto-Loading
GitHubHandler now loads a GitHub token from: src/main/resources/tulip.properties
Falls back to anonymous mode with clear error messages if missing.
Better API Error Handling
User-friendly messages for:
- Missing tokens
- Rate limits
- Invalid file/directory URLs
- Blob/tree misuse