jvit-redmine-context-cli
Version:
CLI to extract Redmine issues as context for agentic coding workflows
197 lines (145 loc) • 3.95 kB
Markdown
# jvit-redmine-context-cli
A CLI to extract Redmine issues as context for agentic coding workflows.
## Features
- Extract Redmine issues as structured context for AI agents
- Sync individual issues or entire projects to local Markdown files
- Incremental updates with change detection
- Comment synchronization with tracking
- Configurable filename patterns and slug generation
- Concurrent processing for large projects
- Retry logic and rate limiting
- YAML configuration with validation
- Optimized for agentic coding workflows and context retrieval
## Installation
```bash
npm install -g jvit-redmine-context-cli
# or
pnpm add -g jvit-redmine-context-cli
```
## Configuration
Create a `redmine.config.yaml` file in your project root:
```yaml
baseUrl: https://redmine.example.com
apiAccessToken: YOUR_API_TOKEN
project:
id: 123
identifier: my-project
outputDir: .jai1/redmine
defaults:
include: [journals, relations, attachments]
status: '*'
pageSize: 100
concurrency: 4
retry:
retries: 3
baseMs: 300
filename:
pattern: '{issueId}-{slug}.md'
slug:
maxLength: 80
dedupe: true
lowercase: true
renameOnTitleChange: false
comments:
anchors:
start: '<!-- redmine:comments:start -->'
end: '<!-- redmine:comments:end -->'
trackBy: journalId
```
### Configuration Options
- `baseUrl`: Your Redmine instance URL
- `apiAccessToken`: Redmine API access token
- `project.id`: Project ID (numeric)
- `project.identifier`: Project identifier (string)
- `outputDir`: Directory to store markdown files (default: `.jai1/redmine`)
- `defaults.include`: What to include (journals, relations, attachments)
- `defaults.status`: Filter by status (`*` for all)
- `defaults.pageSize`: API page size (1-100)
- `defaults.concurrency`: Concurrent requests (1-10)
- `filename.pattern`: Filename pattern with `{issueId}` and `{slug}` placeholders
- `filename.slug`: Slug generation options
- `comments.anchors`: Comment section markers
- `comments.trackBy`: How to track new comments (`journalId` or `createdOn`)
## Usage
### Check Connectivity
```bash
redmine check
```
### Sync Single Issue
```bash
# By ID
redmine sync issue --id 123
# By URL
redmine sync issue --url https://redmine.example.com/issues/123
# Dry run
redmine sync issue --id 123 --dry-run
```
### Sync Project
```bash
# Sync all issues
redmine sync project
# Filter by status
redmine sync project --status "open"
# Sync issues updated since date
redmine sync project --updated-since 2023-01-01
# Custom concurrency and page size
redmine sync project --concurrency 8 --page-size 50
# Dry run
redmine sync project --dry-run
```
### Global Options
- `-c, --config <path>`: Path to configuration file (default: `redmine.config.yaml`)
- `-o, --output-dir <path>`: Output directory for markdown files
- `--dry-run`: Show what would be done without making changes
- `--json`: Output results as JSON
## Output Format
Issues are saved as Markdown files with frontmatter:
```markdown
id: 123
subject: 'Example Issue'
status: 'Open'
priority: 'Normal'
author: 'John Doe'
assigned_to: 'Jane Smith'
created_on: '2023-01-01T10:00:00Z'
updated_on: '2023-01-02T15:30:00Z'
project: 'My Project'
tracker: 'Bug'
lastJournalId: 456
# Issue Description
This is the issue description...
<!-- redmine:comments:start -->
## John Doe - 2023-01-02 15:30
This is a comment on the issue.
## Jane Smith - 2023-01-03 09:15
Another comment with changes.
**Changes:**
- status: Open → In Progress
- assigned_to: John Doe → Jane Smith
<!-- redmine:comments:end -->
```
## Development
```bash
# Install dependencies
pnpm install
# Run in development mode
pnpm dev
# Build
pnpm build
# Run tests
pnpm test
# Lint
pnpm lint
```
## API Exit Codes
- `0`: Success
- `2`: Validation error (configuration, arguments)
- `4`: Resource not found (issue, project)
- `5`: System/network error
## License
MIT
# redmine-context-cli