semvec/pypi-packages huggingface dataset:
devnarrate 0.1.0a3
MCP server that narrates your code changes, from commits to deployments.
License: MIT
Requires Python: >=3.12
Keywords: ai, claude, commit, git, mcp, pr

# DevNarrate
[![GitHub Repo](https://img.shields.io/badge/GitHub-kmandana%2FDevNarrate-24292F?logo=github)](https://github.com/kmandana/DevNarrate)
[![Release](https://img.shields.io/github/v/release/kmandana/DevNarrate?label=Release)](https://github.com/kmandana/DevNarrate/releases)

MCP server that narrates your code changes, from commits to deployments.

## Features

- **Smart Commit Messages** with user approval
- **PR Descriptions** driven by customizable templates
- **GitHub & GitLab** support for PR flows
- **Token-aware diff handling** with automatic pagination
- **Safety-first workflow** by requiring staged changes

## Installation (PyPI)

```bash
pip install devnarrate

# Install pre-release builds
pip install --pre devnarrate
```

### Register the MCP server

Use the Python interpreter from the environment where you ran `pip install` (e.g. `/path/to/venv/bin/python`). Capture it once and reuse:

```bash
PYTHON_BIN=$(python -c 'import sys; print(sys.executable)')

# Claude Code (global scope)
claude mcp add --scope user DevNarrate -- "$PYTHON_BIN" -m devnarrate.server

# Claude Code (project scope)
claude mcp add DevNarrate -- "$PYTHON_BIN" -m devnarrate.server
```

- Cursor (`~/.cursor/mcp.json`):

```json
{
  "mcpServers": {
    "DevNarrate": {
      "command": "/path/to/venv/bin/python",
      "args": ["-m", "devnarrate.server"]
    }
  }
}
```

Restart Cursor after editing the config.

## Usage

### Commit Messages

DevNarrate works entirely off **staged changes**:

```bash
git add <file1> <file2>
# stage everything tracked:
git add -u
```

Then ask Claude (or Cursor):

```
Generate a commit message for my changes
```

DevNarrate summarizes the diff, proposes a conventional commit, and waits for approval before committing.

### PR Descriptions

1. Ask Claude: "Create a PR to main from my current branch"
2. Choose a template if you have custom ones in `.devnarrate/pr-templates/`
3. Review the generated PR description and approve to let DevNarrate call `gh` or `glab`

Example template (`.devnarrate/pr-templates/feature.md`):

```markdown
## Summary
[What does this PR do?]

## Changes
-
-

## Testing
[How to test]

## Related Issues
[Links]
```

If no custom template exists, DevNarrate uses a sensible default.

### Platform Requirements

- **Commits:** only needs git
- **GitHub PRs:** install [gh](https://cli.github.com/) and run `gh auth login`
- **GitLab PRs:** install [glab](https://gitlab.com/gitlab-org/cli) and run `glab auth login`

## Links

- Source: https://github.com/krishnamandanapu/DevNarrate
- Issues: https://github.com/krishnamandanapu/DevNarrate/issues
rd60xx 0.1.0
Helper library for Riden RD60xx programmable power supplies over Modbus RTU (USB)
License: MIT
Requires Python: >=3.8

# rd60xx

Helper library for Riden RD60xx programmable power supplies
(RD6006, RD6006P, RD6012, RD6018, RD6024, RD6030, etc.) over Modbus RTU (USB).

## Features

- Auto-discovery by Modbus address across all serial ports.
- Automatic model detection:
  - ID `60061` → `RD6006`
  - ID `60065` → `RD6006P`
- Model-specific scaling for voltage and current.
- Simple high-level API:
  - `set_voltage(V)`, `set_current(A)`
  - `output_on()`, `output_off()`
  - `read_output()` (measured values)
  - `read_setpoints()` (configured values)
  - `read_firmware_version()` / `read_firmware_version_str()`
- Context manager support with automatic `output_off()` on exit.
- Debug prints toggle: `RD60xx.DEBUG = True`.

## Installation

From local source:

```bash
pip install build
python -m build
pip install dist/rd60xx-0.1.0-py3-none-any.whl
sidll 0.17
Sparse Indexed Doubly Linked List
License: MIT
Requires Python: >=3.9

# Sparse Indexed Doubly Linked List (SIDLL)

## Introduction

### What is it?
A Sparse Indexed Doubly Linked List (SIDLL) is a linked list that is linked in both directions and which has indices (or pointers) distributed throughout the list which enables O(log p + k) worst case time complexity for inserts, deletes and lookups where p is the size of the indices/pointers and k is the maximum distance travelled between the pointer and a given node. Sparse distribution gives the user choice to trade-off between lookup times (faster if the interpointer distance is small) and memory (less if the interpointer distance is large). 

### What can it be used for?
Given that it is always sorted by key, it can be used to keep track of metrics like the streaming mean, median, head/tail as well as min/max (and their associated values).

### Languages
Python, C++

## Methods
- insertNode(key,value)
- deleteNode(key)
- getMinKey()
- getMaxKey()
- getMean()
- getMedian()
- getLength()
- head(length:optional)
- tail(length:optional) 
- keyExists(key)
- getValue(key,index:optional)
- setInterpointerDistance(distance)



## Installing
### Python
There are installers for Windows and [manylinux](https://github.com/pypa/manylinux) works with multiple Linux distros. For example, for Python 3.8 on CentOS:

```
pip install sidll
```

### C++
The .h, .cpp files and CMakeLists.txt are in the SIDLL_C++ directory. 

## Example
### Python
```
import sidll
import random

s = sidll.SIDLL()
s.setVerbosity(0)
s.setInterpointerDistance(10)
deleteList = []

print("-" * 25)
print("Inserting...")
for i in range(0,100):
    randKey = random.uniform(1,100000)
    randVal = random.uniform(1,100000)
    s.insertNode(randKey,0)
    deleteList.append(randKey)
    
print("Length:%d" %s.getLength())
print("MinKey:%f" %s.getMinKey())
print("MaxKey:%f" %s.getMaxKey())
print("Median:%f" %s.getMedian())
print("Mean:%f" %s.getMean())
print(s.head())
print(s.tail())

print("-" * 25)
print("Deleting...")
for i in range(0,50):
    if not deleteList:
        break
    keyToDelete = deleteList.pop()
    s.deleteNode(keyToDelete)
    
print("Length:%d" %s.getLength())
print("MinKey:%f" %s.getMinKey())
print("MaxKey:%f" %s.getMaxKey())
print("Median:%f" %s.getMedian())
print("Mean:%f" %s.getMean())
print(s.head())
print(s.tail())

print(dir(s))
```
## Change log
Version 0.15: First PyPI version.  
Version 0.16: Added an sdist repo.
Version 0.17: ARM arch build bug fix.
simple-indian-date 0.1.0
A simple library to convert dates into Indian date formats
License: MIT
Requires Python: >=3.8

# simple-indian-date

A tiny Python library that converts dates into common Indian date formats.

## Install

pip install simple-indian-date

## Usage

from datetime import datetime
from simple_indian_date import to_dd_mm_yyyy

print(to_dd_mm_yyyy(datetime.now()))