A bidirectional synchronization tool for Azure DevOps work items.
Project description
Tool Sync: Bidirectional Azure DevOps Synchronization
Overview
Tool Sync is a powerful and flexible command-line tool that provides bidirectional synchronization between Azure DevOps work items and local files. Unlike other tools that are often unidirectional or limited to specific work item types, Tool Sync allows you to keep any type of work item (User Stories, Bugs, Tasks, etc.) in sync with local files in your Git repository.
This enables a "Work-Items-as-Code" approach, where your Azure DevOps project can be treated as a single source of truth that is perfectly mirrored in a local directory, allowing you to leverage the power of your favorite text editors and version control systems to manage your work.
Features
- Bidirectional Synchronization: Changes made locally or in Azure DevOps are reflected on the other side.
- Generic Work Item Support: Sync any type of work item, not just Test Cases or User Stories.
- Configurable Mappings: Define which work item types to sync, where to store them, and in what format.
- Local File Representation: Work items are stored as local files (e.g., Markdown with YAML front matter), making them easy to read, edit, and version control.
- "Last Write Wins" Strategy: The tool uses a timestamp-based "last write wins" strategy to handle updates.
Installation
tool-sync offers two installation options depending on your needs.
Standard Installation (Synchronization only)
For the core synchronization features, you can install the package directly using pip:
pip install tool-sync
This will provide you with the tool_sync sync command and all necessary functionality to synchronize your work items.
Installation with Analysis Features
To use the AI-powered analysis server with assistants like Cline, you need to install the package with the [analysis] extra. This includes additional libraries for vector indexing and language processing.
pip install "tool-sync[analysis]"
Configuration
Tool Sync requires a config.yml file in the root of your project. This file defines the connection to your Azure DevOps project and how different work item types should be synchronized.
Here is an example config.yml:
azure_devops:
organization_url: "https://dev.azure.com/your_org"
project_name: "your_project"
personal_access_token: "your_pat"
sync_mappings:
- name: "User Stories for Team A"
work_item_type: "User Story"
local_path: "work_items/team_a/stories"
area_path: 'MyProject\\TeamA' # Optional: Sync only items from this Area Path
file_format: "md"
fields_to_sync:
- System.State
- Microsoft.VSTS.Common.Priority
template: |
---
id: {{ id }}
type: {{ type }}
title: '{{ title }}'
state: {{ fields['System.State'] | default('') }}
priority: {{ fields['Microsoft.VSTS.Common.Priority'] | default('') }}
created_date: '{{ created_date }}'
changed_date: '{{ changed_date }}'
---
# {{ title }}
{{ description }}
- name: "All Bugs"
work_item_type: "Bug"
local_path: "work_items/bugs"
file_format: "md"
Configuration Options
azure_devops:organization_url: The URL of your Azure DevOps organization (e.g.,https://dev.azure.com/my-org).project_name: The name of your Azure DevOps project.personal_access_token: Your Personal Access Token (PAT) for authenticating with the Azure DevOps API.
sync_mappings: A list of mappings, where each mapping defines a sync relationship.name: A descriptive name for the mapping.work_item_type: The type of work item to sync (e.g., "User Story", "Bug").local_path: The local directory where the files for these work items will be stored.area_path(Optional): The Azure DevOps Area Path to filter by. If provided, only work items under this path will be synchronized.fields_to_sync(Optional): A list of additional Azure DevOps fields to sync (e.g.,System.State,System.Tags).file_format: The file extension for the local files (e.g.,md,json).conflict_resolution: (Future feature) The strategy to use when a conflict is detected.template: The Jinja2 template to use for generating the content of the local files.
Usage
To run the synchronization, simply execute the following command in your terminal:
tool_sync sync
The tool will read your config.yml, connect to Azure DevOps, and perform the synchronization based on your defined mappings.
Creating New Work Items
You can create a new work item in Azure DevOps by creating a new file in the corresponding local directory. The file should follow the format defined in your template, but without an id field in the front matter.
For example, to create a new User Story, you could create a new file work_items/user_stories/my-new-story.md with the following content:
---
type: User Story
state: New
created_date: '2023-10-27T10:00:00Z'
changed_date: '2023-10-27T10:00:00Z'
title: 'My New User Story'
---
# My New User Story
This is the description of my new user story.
The next time you run tool_sync sync, the tool will detect this new file, create a corresponding User Story in Azure DevOps, and then update the local file with the newly assigned ID.
AI-Powered Analysis with Cline
tool_sync is more than just a synchronization tool. It includes a powerful AI analysis engine that can be used as a local MCP (Model Context Protocol) server for AI assistants like the Cline VS Code extension.
This allows you to have rich, context-aware conversations about your project's data, ask complex questions, find patterns, and identify root causes.
How It Works
The analysis engine uses a Retrieval-Augmented Generation (RAG) pipeline. When you start the server, it can index all your local work item files into a local vector database. When you ask a question via Cline, the server finds the most relevant documents and provides them as context to the LLM, leading to highly accurate and relevant answers.
Usage
Step 1: Start the Analysis Server
To start the MCP server, run the following command in your terminal:
tool_sync analyze
The server will start and listen for connections from Cline via STDIO.
Step 2: (First time only) Index Your Documents
The first time you use the analysis feature, or after you have synchronized new work items, you need to tell the server to build its knowledge base. You can do this by asking Cline to run the index_documents tool.
Example prompt for Cline:
Using the
tool_sync_analyzertool, please run theindex_documentscommand. Thework_items_pathis 'work_items/'.
Step 3: Configure Cline
You need to tell Cline how to connect to the tool_sync server. Open your cline_mcp_settings.json file and add the following server configuration.
Important: You must replace /path/to/your/repo/ with the absolute path to this project's directory on your machine.
{
"mcpServers": {
"tool_sync_analyzer": {
"command": "/path/to/your/repo/venv/bin/python",
"args": [
"-m",
"tool_sync.main",
"analyze"
],
"disabled": false
}
}
}
Note: The command should point to the Python executable within the virtual environment where you installed tool_sync to ensure it finds all the correct libraries.
Step 4: Ask Questions!
Once configured, you can ask Cline complex questions about your project. Remember to tell Cline to use your tool.
Example prompts for Cline:
- "Using the
tool_sync_analyzertool, what is the most common cause of login errors?" - "Please summarize the defects related to the 'Roteirizador Product' using the
query_documentstool."
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file tool_sync-0.3.4.tar.gz.
File metadata
- Download URL: tool_sync-0.3.4.tar.gz
- Upload date:
- Size: 20.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3026e490a06dfb39da89e0cb2222d89e1aaf741ff93e4d068b36ec407f22aa09
|
|
| MD5 |
2c4d3a786821b32e5434b2c3b25abd15
|
|
| BLAKE2b-256 |
f97d67bfe03d4ad4df83c763f9d46b6e0caa169b191ab075708d51be6ac2c18c
|
Provenance
The following attestation bundles were made for tool_sync-0.3.4.tar.gz:
Publisher:
publish-to-pypi.yml on fabioribeiroquispe/tool_sync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tool_sync-0.3.4.tar.gz -
Subject digest:
3026e490a06dfb39da89e0cb2222d89e1aaf741ff93e4d068b36ec407f22aa09 - Sigstore transparency entry: 434076354
- Sigstore integration time:
-
Permalink:
fabioribeiroquispe/tool_sync@22514ca4958958e701d5ac03f912f67c1c7ed0e5 -
Branch / Tag:
refs/heads/feature/clarify-analysis-install - Owner: https://github.com/fabioribeiroquispe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@22514ca4958958e701d5ac03f912f67c1c7ed0e5 -
Trigger Event:
push
-
Statement type:
File details
Details for the file tool_sync-0.3.4-py3-none-any.whl.
File metadata
- Download URL: tool_sync-0.3.4-py3-none-any.whl
- Upload date:
- Size: 17.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.12.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4d7d128af8fc75c17da5e1b0108781c908f1416d6993d41f852ea22b76385d07
|
|
| MD5 |
a5c068706d9879faf9d418c4381c33ed
|
|
| BLAKE2b-256 |
56e8623b276ead969ec819bf01d8312369655710b1347f0ab6e6c478fff73035
|
Provenance
The following attestation bundles were made for tool_sync-0.3.4-py3-none-any.whl:
Publisher:
publish-to-pypi.yml on fabioribeiroquispe/tool_sync
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
tool_sync-0.3.4-py3-none-any.whl -
Subject digest:
4d7d128af8fc75c17da5e1b0108781c908f1416d6993d41f852ea22b76385d07 - Sigstore transparency entry: 434076364
- Sigstore integration time:
-
Permalink:
fabioribeiroquispe/tool_sync@22514ca4958958e701d5ac03f912f67c1c7ed0e5 -
Branch / Tag:
refs/heads/feature/clarify-analysis-install - Owner: https://github.com/fabioribeiroquispe
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-to-pypi.yml@22514ca4958958e701d5ac03f912f67c1c7ed0e5 -
Trigger Event:
push
-
Statement type: