{"id":32669081,"url":"https://github.com/ensemble-edge/edgit","last_synced_at":"2025-11-06T07:01:24.289Z","repository":{"id":321623873,"uuid":"1086486748","full_name":"ensemble-edge/edgit","owner":"ensemble-edge","description":"Component-atomic versioning for Git. Track and version prompts, agents, and configs individually while maintaining Git compatibility.","archived":false,"fork":false,"pushed_at":"2025-10-30T17:07:35.000Z","size":3767,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-30T17:36:45.366Z","etag":null,"topics":["agents","ai","cli","developer-tools","git","typescript","versioning","workflows"],"latest_commit_sha":null,"homepage":"https://ensemble.ai","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ensemble-edge.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-10-30T13:39:51.000Z","updated_at":"2025-10-30T17:07:39.000Z","dependencies_parsed_at":"2025-10-30T17:36:50.517Z","dependency_job_id":null,"html_url":"https://github.com/ensemble-edge/edgit","commit_stats":null,"previous_names":["ensemble-edge/edgit"],"tags_count":10,"template":false,"template_full_name":null,"purl":"pkg:github/ensemble-edge/edgit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ensemble-edge%2Fedgit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ensemble-edge%2Fedgit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ensemble-edge%2Fedgit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ensemble-edge%2Fedgit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ensemble-edge","download_url":"https://codeload.github.com/ensemble-edge/edgit/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ensemble-edge%2Fedgit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":282769251,"owners_count":26724204,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-05T02:00:05.946Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agents","ai","cli","developer-tools","git","typescript","versioning","workflows"],"created_at":"2025-11-01T02:01:58.855Z","updated_at":"2025-11-06T07:01:24.275Z","avatar_url":"https://github.com/ensemble-edge.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🌌 Edgit: The Multiverse Already Exists in Your Git History\n\n*Every version of every component that ever existed is still there. Edgit just makes them visible.*\n\n```bash\nnpm install -g @ensemble-edge/edgit\n```\n\n**Git tag-based component versioning for AI systems.** The multiverse already exists in your Git history - every version of every component lives in your commits. Edgit makes them accessible through native Git tags, eliminating merge conflicts while unlocking component independence.\n\n## Novel Architecture: The Multiverse Made Visible\n\n### The Hidden Truth About Your Repository\n\nYour Git repository is already a multiverse. Every component version that ever existed is there—Git never forgets. But you can't see them, can't access them, can't deploy them independently.\n\n**Until now.**\n\n### What You See vs What Actually Exists\n\n```bash\n# What Git shows you\ngit log --oneline\nabc1234 \"Update everything to v3.0.0\"\ndef5678 \"Fix bugs in v2.1.0\" \n789abcd \"Initial v1.0.0\"\n\n# What actually exists (the multiverse)\nYour Repository Contains:\n├── helper-prompt v1.0.0 (perfect, locked away)\n├── helper-prompt v2.0.0 (good, but lost)  \n├── helper-prompt v3.0.0 (current, but broken)\n├── data-agent v1.0.0 (stable, unreachable)\n├── data-agent v2.0.0 (experimental, buried)\n└── sql-query v1.0.0 (worked perfectly, gone)\n\n# What Edgit reveals (Git tags as portals)\ngit tag -l\ncomponents/helper-prompt/v1.0.0    ← Portal to the perfect version\ncomponents/helper-prompt/v2.0.0    ← Portal to the good version  \ncomponents/helper-prompt/v3.0.0    ← Portal to current version\ncomponents/data-agent/v1.0.0       ← Portal to stable version\ncomponents/sql-query/v1.0.0        ← Portal to the working version\n```\n\n**The Magic: Git tags are portals to every version that ever existed.**\n\n### The Problem We Solved\n\n**Traditional Approach: Fighting the Multiverse**\n```bash\n❌ components.json stores versions → Merge conflicts destroy the multiverse\n❌ Custom version tracking → Data corruption erases parallel realities  \n❌ Stored state gets out of sync → Lost access to perfect versions\n❌ Complex state management → Can't navigate the component multiverse\n```\n\n**Edgit's Solution: Git Tags as Multiverse Navigation**\n```bash\n✅ Git tags reveal all versions → Navigate the multiverse without conflicts\n✅ Native Git operations → The multiverse is bulletproof (Git guarantees)\n✅ Git is the portal system → Always in sync with reality\n✅ Standard Git workflows → Multiverse navigation feels natural\n```\n\n## About\n\nEdgit wraps Git to add component-level versioning while maintaining 100% Git compatibility. Every prompt, agent, model config, and SQL query gets its own version automatically. Zero learning curve - your git commands just get smarter.\n\n## Why Now? The Perfect Storm\n\n### The Evolution We're Living Through\n\n**2010s: The Monorepo Migration**\n```\nBefore: 100 repositories, 100 version numbers, dependency hell\nAfter:  1 repository, 1 version number, deployment heaven\n```\n\n**2020s: The AI Component Explosion**\n```\nReality: 1 repository, 500 components, 1 version number\nProblem: Your prompt changes shouldn't force a database migration\nBigger Problem: That perfect prompt from v2.1.0? Locked away when you ship v3.0.0\n```\n\n**2024: Edge Deployment Changes Everything**\n```\nTraditional: Deploy entire app → Restart everything → Hope it works\nEdge Reality: \n  - Prompt v3.1 running in Singapore\n  - Prompt v3.0 still running in Frankfurt (canary failed)\n  - Agent v2.0 globally (it's perfect, don't touch it)\n  - SQL v4.0 in US-WEST (testing new query)\n  \nThe Truth: Components live independently at the edge.\nYour versioning should too.\n```\n\n### The Critical Insight\n\n**We've built monorepos for deployment simplicity but lost component independence.**\n\nEvery AI system today is actually:\n- 20+ prompts (each evolving at different speeds)\n- 10+ agents (some stable for months, some changing daily)  \n- 50+ SQL queries (that one perfect query from March? Gone.)\n- 100+ configs (model params, temperature settings, tools)\n\n**But Git sees only one thing: your repository version.**\n\nThis mismatch is killing AI development velocity:\n```bash\n# The daily tragedy\n\"The new prompt broke production\" → Revert everything\n\"v2 agent is slower\" → Can't use v1 agent with v3 prompt\n\"That SQL was perfect 5 commits ago\" → Archaeology through Git history\n\"Customer X needs the old prompt\" → Entire separate deployment\n```\n\n## The Hidden Truth\n\nYour Git repository is already a multiverse. Every component version that ever existed is there—Git never forgets. But you can't see them, can't access them, can't deploy them independently.\n\n**Until now.**\n\n## What You See vs What Exists\n\n[previous content continues...]\n\n### Why Edge + AI + Monorepos = Need for Multiverse Navigation\n\n```javascript\n// Without Edgit: Trapped in one reality\nconst deployment = {\n  version: \"v3.0.0\",\n  includes: {\n    brilliantNewAgent: \"v3.0.0\",      // ✅ Want this\n    experimentalPrompt: \"v3.0.0\",      // ⚠️ Not ready\n    brokenSQLQuery: \"v3.0.0\",          // ❌ Breaks production\n    perfectOldValidator: \"lost in git history\"  // 😭 Exists but unreachable\n  }\n};\n\n// With Edgit: Access the full multiverse\nconst deployment = {\n  agent: \"v3.0.0\",         // ✅ Take the new agent\n  prompt: \"v2.1.0\",        // ✅ Keep stable prompt from parallel reality\n  query: \"v1.0.0\",         // ✅ Use working SQL from the past\n  validator: \"v1.0.0\"      // ✅ Resurrect that perfect old validator\n};\n```\n\n### The Multiverse Multiplier\n\nEdge deployment makes this 100x more critical:\n\n- **Instant rollback per component** - One prompt failing? Portal back to the working version\n- **Geographic experimentation** - Test prompt v3 in Asia while v2 runs in Europe  \n- **Zero-downtime iteration** - Update components across realities independently\n- **Perfect combinations** - Mix prompt v1.0 with agent v3.0 from different timelines\n\n**This isn't theoretical. The multiverse is real:**\n- OpenAI updates embeddings without touching GPT (different component timelines)\n- Anthropic versions Claude's capabilities independently (parallel evolution)\n- Google deploys Gemini features progressively (selective reality deployment)\n\n**Your AI system deserves multiverse navigation too.**\n\n## Features\n\n- �️ **Git tag-based versioning** - All versions stored as native Git tags\n- 🔄 **Zero merge conflicts** - No version data in tracked files\n- 🎯 **Automatic component detection** - Smart file pattern recognition\n- 🤖 **AI-powered commit messages** - OpenAI integration for intelligent commit descriptions\n- 📦 **Independent component versions** - Version and deploy components separately\n- � **Deployment tag management** - Moveable tags for staging, prod, etc.\n- ⚡ **Native Git performance** - Zero overhead, pure Git operations\n- � **Immutable version history** - Git tags preserve all versions forever\n\n## Quick Start\n\n```bash\nnpm install -g @ensemble-edge/edgit\ncd your-repo\nedgit init\n```\n\n**See the multiverse in action:**\n```bash\n# Edit a component file\necho \"You are a helpful assistant\" \u003e prompts/helper.prompt.md\n\n# Commit with AI-generated message (optional)\nedgit commit\n# Creates Git commit: \"feat: add helper prompt initial implementation\"\n\n# Create a portal to this version\nedgit tag create helper-prompt v1.0.0\n# Creates Git tag: components/helper-prompt/v1.0.0\n\n# Deploy to production reality\nedgit deploy set helper-prompt v1.0.0 --to prod\n# Creates/moves Git tag: components/helper-prompt/prod → v1.0.0\n\n# Navigate the multiverse\nedgit tag list helper-prompt\n# v1.0.0  (Portal created: 2024-10-31, SHA: abc1234)\n\n# See which reality is deployed where\nedgit deploy status helper-prompt  \n# prod:    v1.0.0 (this reality)\n# staging: (exploring other possibilities)\n```\n\n**Advanced multiverse navigation:**\n```bash\n# All operations are pure Git portals under the hood\ngit tag -l \"components/helper-prompt/*\"    # List all realities\ngit show components/helper-prompt/v1.0.0   # Peek into a specific reality\ngit tag -d components/helper-prompt/v1.0.0 # Close a portal (careful!)\n\n# Deploy by moving between realities (atomic operations)\ngit tag -f components/helper-prompt/prod components/helper-prompt/v1.0.0\ngit push origin --tags                     # Sync multiverse with remote\n```\n\n## Git Tag Architecture: Multiverse Navigation System\n\n### Why Git Tags Make Perfect Multiverse Portals\n\n**Git tags solve the fundamental problems of multiverse navigation:**\n\n1. **No Reality Conflicts**: Tags exist outside the file tree - no merge conflicts between realities\n2. **Immutable History**: Once created, version portals never change - every reality is preserved  \n3. **Native Git**: Uses Git's built-in multiverse primitives (it was designed for this!)\n4. **Distributed**: Portals sync naturally with Git remotes across the distributed multiverse\n5. **Atomic Operations**: Portal creation/movement is atomic - no broken realities\n6. **Performance**: No overhead - pure Git operations at the speed of light\n\n### Portal Namespace Design\n\n```bash\n# Version portals (immutable doorways to specific realities)\ncomponents/\u003ccomponent-name\u003e/\u003cversion\u003e\ncomponents/helper-prompt/v1.0.0    ← Portal to the perfect prompt reality\ncomponents/data-agent/v2.1.3       ← Portal to the stable agent timeline\n\n# Deployment portals (moveable - can point to different realities) \ncomponents/\u003ccomponent-name\u003e/\u003cenvironment\u003e\ncomponents/helper-prompt/prod      → currently points to v1.0.0 reality\ncomponents/helper-prompt/staging   → exploring v1.1.0-beta timeline  \ncomponents/data-agent/prod         → locked into v2.1.3 stable reality\n```\n\n### Component Discovery Across the Multiverse\n\nEdgit automatically detects component realities by file patterns:\n```bash\n# Prompt Components\nprompts/**/*        → prompt component multiverse\n*.prompt.md         → prompt files anywhere\ninstructions/**/*   → instruction templates\ntemplates/**/*      → template files\n\n# Agent Components  \nagents/**/*         → agent component timeline\nscripts/**/*.js     → JavaScript agents\nscripts/**/*.ts     → TypeScript agents  \nscripts/**/*.py     → Python agents\nscripts/**/*.sh     → Shell script agents (NEW!)\nscripts/**/*.bash   → Bash script agents (NEW!)\n*.agent.*          → agent files anywhere\n\n# SQL Components\nqueries/**/*        → sql component reality\nsql/**/*           → SQL directories\ndatabase/**/*      → database files\n*.sql              → SQL files anywhere\n*.query.*          → query files\n\n# Config Components\nconfigs/**/*        → config component dimension\nconfig/**/*        → configuration directories\nsettings/**/*      → settings files\n*.config.*         → config files anywhere\n*.yaml, *.yml      → YAML configurations\n*.json             → JSON configurations\n*.toml, *.ini      → Other config formats\n```\n\n### Intelligent Collision Detection\n\nEdgit prevents component naming conflicts with smart collision detection:\n\n```bash\n# When conflicts are detected\n❌ Component name collision detected: \"auth-prompt\" already exists.\n   Suggested alternatives: auth-prompt-2, auth-prompt-3, auth-prompt-new\n   File: prompts/duplicate-auth.prompt.md\n\n# Automatic suggestions include:\n• Numbered variants: component-2, component-3\n• Descriptive suffixes: component-new, component-alt, component-v2\n• Smart type detection: prevents \"prompt-prompt\" duplicates\n```\n\n**Collision Protection Features:**\n- **Fail-fast approach**: Stops initialization rather than silent overwrites\n- **Helpful suggestions**: Provides ready-to-use alternative names\n- **Registry awareness**: Checks existing components before naming\n- **Smart suffix detection**: Avoids duplicate type suffixes\n\n### Workflow Integration: Seamless Multiverse Travel\n\n```bash\n# Your existing Git workflow stays the same\ngit add .\ngit commit -m \"update prompt\"\ngit push\n\n# Add Edgit multiverse navigation when ready\nedgit tag create my-prompt v1.0.0    # Create immutable portal\nedgit deploy set my-prompt v1.0.0 --to prod  # Deploy to production reality\n\n# All portals live in Git tags - zero files touched, zero conflicts\n```\n\n## Commands Reference\n\n### Core Commands\n\n```bash\n# Initialize repository\nedgit init [--force]\n\n# Component management  \nedgit components                    # List all components\nedgit components show \u003ccomponent\u003e   # Show component details\n\n# Version management\nedgit tag create \u003ccomponent\u003e \u003cversion\u003e    # Create version tag\nedgit tag list [component]                # List versions\nedgit tag show \u003ccomponent\u003e \u003cversion\u003e      # Show version details\nedgit tag delete \u003ccomponent\u003e \u003cversion\u003e    # Delete version\n\n# Deployment management\nedgit deploy set \u003ccomponent\u003e \u003cversion\u003e --to \u003cenv\u003e  # Deploy version\nedgit deploy status [component]                    # Show deployments  \nedgit deploy list                                  # List all deployments\nedgit deploy promote \u003ccomponent\u003e \u003cfrom\u003e \u003cto\u003e       # Promote between envs\n\n# Commit assistance (optional)\nedgit commit [-m message]           # AI-assisted or manual commit\n```\n\n### AI Integration Setup\n\nConfigure OpenAI for intelligent commit message generation:\n\n```bash\n# Add your OpenAI API key to .env\necho \"OPENAI_API_KEY=sk-proj-...\" \u003e\u003e .env\n\n# AI will analyze your changes and generate contextual commits\nedgit commit\n# Example output: \"feat(auth-prompt): enhance security with MFA token support\"\n\n# Manual override still available\nedgit commit -m \"your custom message\"\n```\n\n**AI Commit Features:**\n- **Context-aware analysis**: Understands component types and changes\n- **Conventional commit format**: Follows standard commit conventions\n- **Component scope detection**: Automatically identifies affected components\n- **Fallback gracefully**: Works without API key (manual mode)\n\n### Legacy Commands (Deprecated)\n\nThese commands now provide migration guidance:\n```bash\nedgit history    # → Use: edgit tag list \u003ccomponent\u003e\nedgit register   # → Use: edgit init --force  \nedgit resync     # → Use: edgit init --force\n```\n\n## Requirements\n\n- **Node.js** 18+ \n- **Git** 2.0+\n- Works with any Git repository\n\n*Note: Global npm installation now works correctly with built JavaScript files.*\n\n## Migration from Legacy Versions\n\nIf you're upgrading from a pre-Git-tag version of Edgit:\n\n```bash\n# Your old component registry is preserved  \n# but versions now live in Git tags\n\n# Reinitialize to discover components\nedgit init --force\n\n# Create tags for your existing components\nedgit tag create my-component v1.0.0\n\n# Deploy using the new tag system\nedgit deploy set my-component v1.0.0 --to prod\n```\n\n**Benefits of Migration:**\n- ✅ Zero merge conflicts going forward\n- ✅ Better performance (no JSON parsing)\n- ✅ Native Git operations\n- ✅ Immutable version history\n- ✅ Easier debugging and inspection\n\n## Technical Details\n\n### Enhanced Error Handling \u0026 User Experience\n\nEdgit provides comprehensive error handling with actionable guidance:\n\n```bash\n# Component naming conflicts\n❌ Component name collision detected: \"auth-prompt\" already exists.\n   Suggested alternatives: auth-prompt-2, auth-prompt-3, auth-prompt-new\n   File: prompts/duplicate-auth.prompt.md\n\n# Version tag conflicts  \n❌ Version tag already exists: components/my-component/v1.0.0\n   Use --force to overwrite or choose a different version\n\n# Deployment validation\n❌ Cannot deploy: version v2.0.0 does not exist for component \"my-component\"\n   Available versions: v1.0.0, v1.1.0\n   Create version first: edgit tag create my-component v2.0.0\n```\n\n### Enhanced Component Type Detection\n\n**Expanded Agent Support**: Now includes shell scripting support\n```bash\n# All supported agent types\nscripts/**/*.js     → JavaScript agents\nscripts/**/*.ts     → TypeScript agents  \nscripts/**/*.py     → Python agents\nscripts/**/*.sh     → Shell script agents (NEW!)\nscripts/**/*.bash   → Bash script agents (NEW!)\nagents/**/*         → Any file in agents directory\n*.agent.*          → Agent files anywhere\n```\n\n**Smart Pattern Matching**: Comprehensive file pattern recognition\n```bash\n# Prompt patterns\nprompts/**/*        → Dedicated prompts directory\n*.prompt.md         → Prompt files anywhere  \ninstructions/**/*   → Instruction templates\ntemplates/**/*      → Template files\n\n# Configuration patterns  \nconfigs/**/*        → Configuration directories\nsettings/**/*       → Settings files\n*.config.*         → Config files with .config. in name\n*.yaml, *.yml      → YAML configuration files\n*.json             → JSON configuration files\n*.toml, *.ini      → Additional config formats\n\n# SQL patterns\nqueries/**/*        → SQL query directories\nsql/**/*           → SQL directories\ndatabase/**/*      → Database-related files\n*.sql              → SQL files anywhere\n*.query.*          → Query files with .query. in name\n```\n\n### Component Name Collisions\n\n**Problem**: Multiple files generate the same component name\n```bash\n❌ Component name collision detected: \"auth-prompt\" already exists.\n```\n\n**Solutions**:\n```bash\n# Option 1: Use suggested alternatives\n# Rename one file using the suggestions provided\n\n# Option 2: Use more specific naming\nmv prompts/auth.prompt.md prompts/user-auth.prompt.md\nmv prompts/admin-auth.prompt.md prompts/admin-auth.prompt.md\n\n# Option 3: Organize in subdirectories\nmkdir prompts/user \u0026\u0026 mv prompts/auth.prompt.md prompts/user/auth.prompt.md\n```\n\n### AI Commit Issues\n\n**Problem**: AI commits failing or generating poor messages\n```bash\n# Check API key setup\ncat .env | grep OPENAI_API_KEY\n\n# Test with manual fallback\nedgit commit -m \"manual commit message\"\n\n# Debug mode (if available)\nDEBUG=true edgit commit\n```\n\n### Git Tag Management\n\n**Problem**: Deployment showing wrong versions\n```bash\n# Check what tags actually exist\ngit tag -l \"components/*\"\n\n# Verify tag points to expected commit\ngit show components/my-component/v1.0.0\n\n# Fix deployment tag if needed\nedgit deploy set my-component v1.0.0 --to prod\n```\n\n### Performance Issues\n\n**Problem**: Slow component detection in large repositories\n```bash\n# Limit scan scope (if many files)\n# Focus on specific directories during init\n\n# Use .gitignore to exclude irrelevant files\necho \"node_modules/\" \u003e\u003e .gitignore\necho \"dist/\" \u003e\u003e .gitignore\n```\n\n### Migration Problems\n\n**Problem**: Upgrading from legacy Edgit versions\n```bash\n# Backup existing registry\ncp .edgit/components.json .edgit/components.json.backup\n\n# Force reinitialize with new system\nedgit init --force\n\n# Recreate tags for existing components\nedgit tag create my-component v1.0.0\n```\n\n## Advanced Scenarios\n\n### Tag Format Specification\n\n```bash\n# Version tags (immutable)\ncomponents/{component-name}/{semantic-version}\n- Must follow semver: v1.0.0, v2.1.3-beta, etc.\n- Immutable once created\n- Points to specific Git SHA\n\n# Deployment tags (moveable)\ncomponents/{component-name}/{environment-name}  \n- Can be any environment name: prod, staging, dev, etc.\n- Moveable - can point to different versions\n- Atomic updates via Git tag operations\n```\n\n### Implementation Notes\n\n- **Registry File**: Minimal `components.json` contains only `{path, type}` per component\n- **Version Storage**: All versions stored as Git tags only\n- **Conflict Resolution**: Impossible - no version data in tracked files  \n- **Performance**: O(1) tag operations, no file I/O for versions\n- **Backup**: Automatic via Git - tags sync with remotes\n\n### Integration with Git Workflows\n\nEdgit is designed to integrate seamlessly:\n\n```bash\n# Works with any Git workflow\ngit flow init\ngit flow feature start new-prompt\n# ... edit files ...\nedgit commit                        # Optional AI commit\ngit flow feature finish new-prompt  \nedgit tag create my-prompt v1.1.0   # Version when ready\n\n# Works with GitHub/GitLab workflows  \ngit checkout -b feature/new-agent\n# ... edit files ...\ngit push origin feature/new-agent\n# ... merge PR ...\nedgit tag create my-agent v2.0.0    # Version on main\n```\n\n## Documentation\n\n- 📖 **[Full Documentation](./docs/)** - Complete guides and API reference\n- 🚀 **[Getting Started](./docs/quickstart.mdx)** - Detailed setup and first steps\n- 💡 **[Examples](./examples/)** - Real-world usage patterns\n\n## Development \u0026 Contributing\n\nWe welcome contributions! The project has comprehensive development infrastructure to ensure code quality and maintainability.\n\n### Development Setup\n\n```bash\n# Clone and install\ngit clone https://github.com/ensemble-edge/edgit.git\ncd edgit\nnpm install\n\n# Build\nnpm run build\n\n# Run tests\nnpm test\n\n# Run validation (types, lint, format, build, tests)\nnpm run validate\n```\n\n### Documentation for Contributors\n\n- **[CLAUDE.md](./CLAUDE.md)** - Guidance for AI assistants working on the codebase\n- **[DEVELOPMENT.md](./DEVELOPMENT.md)** - Complete developer setup and workflow guide\n- **[CONTRIBUTING.md](../CONTRIBUTING.md)** - Contribution guidelines and standards\n- **[TESTING.md](./TESTING.md)** - Testing strategy and patterns\n\n### Code Quality Tools\n\nThe project uses modern development tools:\n\n- **TypeScript** - Strict mode enabled, no `any` types\n- **ESLint** - TypeScript-focused linting with strict rules\n- **Prettier** - Consistent code formatting\n- **Vitest** - Fast, modern testing framework\n- **VSCode Integration** - Settings and extensions configured\n\n### Testing\n\n```bash\n# Run all tests\nnpm test\n\n# Watch mode\nnpm run test:watch\n\n# Coverage report\nnpm run test:coverage\n```\n\n**Test Coverage:**\n- 16 integration tests covering critical paths\n- TestGitRepo helper for isolated Git operations\n- Fixtures for all component types\n\n### Code Style\n\n- **Commits**: Follow [Conventional Commits](https://www.conventionalcommits.org/)\n- **Formatting**: 2 spaces, single quotes, no semicolons\n- **TypeScript**: Explicit return types, no `any`\n- **Documentation**: JSDoc comments for all public APIs\n\n### Contributing Workflow\n\n1. Fork and clone the repository\n2. Create a feature branch (`feature/your-feature`)\n3. Make changes following code standards\n4. Run `npm run validate` to verify\n5. Commit using conventional commit format\n6. Push and create a pull request\n\nSee [CONTRIBUTING.md](../CONTRIBUTING.md) for detailed guidelines.\n\n## Versioning\n\nThis project is in beta and follows semantic versioning with pre-1.0 conventions:\n\n- **Current Phase**: Beta (`0.x.x`)\n  - Minor versions (`0.X.0`) may contain breaking changes\n  - Patch versions (`0.0.X`) for backwards-compatible fixes\n  - We'll stay in `0.x` until the API is stable\n\n- **Future**: Stable (`1.0.0+`)\n  - Standard semver: breaking.feature.fix\n  - Breaking changes only in major versions\n\n## Community \u0026 Support\n\n- 🐛 **Issues** - [Report bugs or request features](https://github.com/ensemble-edge/edgit/issues)\n- 💬 **Discussions** - [Community discussions and Q\u0026A](https://github.com/ensemble-edge/edgit/discussions)\n- 📧 **Contact** - [hello@ensemble.ai](mailto:hello@ensemble.ai)\n\n## License\n\n\nMIT - see [LICENSE](LICENSE) file for details.\n\n## Trademark\n\nEnsemble® is a registered trademark of Higinio O. Maycotte.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fensemble-edge%2Fedgit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fensemble-edge%2Fedgit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fensemble-edge%2Fedgit/lists"}