aiaddons 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- aiaddons-0.1.0/.gitignore +19 -0
- aiaddons-0.1.0/.python-version +1 -0
- aiaddons-0.1.0/AGENTS.md +116 -0
- aiaddons-0.1.0/LICENSE +21 -0
- aiaddons-0.1.0/PKG-INFO +458 -0
- aiaddons-0.1.0/README.md +435 -0
- aiaddons-0.1.0/config.json +13 -0
- aiaddons-0.1.0/docs/ARCHITECTURE.md +829 -0
- aiaddons-0.1.0/docs/REGISTRY.md +127 -0
- aiaddons-0.1.0/pyproject.toml +74 -0
- aiaddons-0.1.0/registry/addons/brave-search-mcp.yaml +48 -0
- aiaddons-0.1.0/registry/addons/caveman.yaml +35 -0
- aiaddons-0.1.0/registry/addons/context7-mcp.yaml +48 -0
- aiaddons-0.1.0/registry/addons/figma-mcp.yaml +50 -0
- aiaddons-0.1.0/registry/addons/filesystem-mcp.yaml +40 -0
- aiaddons-0.1.0/registry/addons/firecrawl-mcp.yaml +50 -0
- aiaddons-0.1.0/registry/addons/github-mcp.yaml +48 -0
- aiaddons-0.1.0/registry/addons/karpathy-behavioral-skill.yaml +36 -0
- aiaddons-0.1.0/registry/addons/notion-mcp.yaml +49 -0
- aiaddons-0.1.0/registry/addons/playwright-mcp.yaml +41 -0
- aiaddons-0.1.0/registry/addons/ponytail-audit-skill.yaml +32 -0
- aiaddons-0.1.0/registry/addons/ponytail-debt-skill.yaml +32 -0
- aiaddons-0.1.0/registry/addons/ponytail-gain-skill.yaml +32 -0
- aiaddons-0.1.0/registry/addons/ponytail-help-skill.yaml +32 -0
- aiaddons-0.1.0/registry/addons/ponytail-review-skill.yaml +32 -0
- aiaddons-0.1.0/registry/addons/ponytail-skill.yaml +32 -0
- aiaddons-0.1.0/registry/addons/ponytail.yaml +40 -0
- aiaddons-0.1.0/registry/addons/postgres-mcp.yaml +47 -0
- aiaddons-0.1.0/registry/addons/python-lint-plugin.yaml +38 -0
- aiaddons-0.1.0/registry/addons/sentry-mcp.yaml +48 -0
- aiaddons-0.1.0/registry/addons/sequential-thinking-mcp.yaml +40 -0
- aiaddons-0.1.0/registry/addons/skill-creator.yaml +37 -0
- aiaddons-0.1.0/registry/addons/stripe-mcp.yaml +48 -0
- aiaddons-0.1.0/registry/addons/supabase-mcp.yaml +48 -0
- aiaddons-0.1.0/registry/addons/superpowers-brainstorming.yaml +35 -0
- aiaddons-0.1.0/registry/addons/superpowers-planning.yaml +35 -0
- aiaddons-0.1.0/registry/addons/superpowers-review.yaml +35 -0
- aiaddons-0.1.0/registry/addons/superpowers-tdd.yaml +35 -0
- aiaddons-0.1.0/registry/addons/superpowers-worktree.yaml +40 -0
- aiaddons-0.1.0/registry/addons/superpowers.yaml +40 -0
- aiaddons-0.1.0/registry/addons/vibesec-skill.yaml +35 -0
- aiaddons-0.1.0/registry/pending/SCOUT_REPORT.md +102 -0
- aiaddons-0.1.0/registry/pending/browserstack-mcp.yaml +54 -0
- aiaddons-0.1.0/registry/pending/chrome-devtools-mcp.yaml +54 -0
- aiaddons-0.1.0/registry/pending/heroku-mcp.yaml +53 -0
- aiaddons-0.1.0/registry/pending/make-project-github-ready.yaml +35 -0
- aiaddons-0.1.0/registry/pending/qase-mcp.yaml +47 -0
- aiaddons-0.1.0/registry/pending/updates/context7-mcp-v4.1.1.yaml +47 -0
- aiaddons-0.1.0/registry/pending/updates/figma-mcp-v1.40.6.yaml +48 -0
- aiaddons-0.1.0/registry/pending/updates/filesystem-mcp-v2026.8.31.yaml +40 -0
- aiaddons-0.1.0/registry/pending/updates/firecrawl-mcp-v3.25.5.yaml +48 -0
- aiaddons-0.1.0/registry/pending/updates/notion-mcp-v2.5.2.yaml +48 -0
- aiaddons-0.1.0/registry/pending/updates/sequential-thinking-mcp-v2026.8.31.yaml +40 -0
- aiaddons-0.1.0/registry/stacks/agent-behavior-stack.yaml +7 -0
- aiaddons-0.1.0/registry/stacks/dev-starter-stack.yaml +7 -0
- aiaddons-0.1.0/src/aiaddons/__init__.py +5 -0
- aiaddons-0.1.0/src/aiaddons/__main__.py +6 -0
- aiaddons-0.1.0/src/aiaddons/agents/__init__.py +16 -0
- aiaddons-0.1.0/src/aiaddons/agents/antigravity.py +106 -0
- aiaddons-0.1.0/src/aiaddons/agents/base.py +31 -0
- aiaddons-0.1.0/src/aiaddons/agents/claude_code.py +85 -0
- aiaddons-0.1.0/src/aiaddons/agents/codex.py +81 -0
- aiaddons-0.1.0/src/aiaddons/agents/manager.py +58 -0
- aiaddons-0.1.0/src/aiaddons/agents/utils.py +48 -0
- aiaddons-0.1.0/src/aiaddons/cli/__init__.py +5 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/__init__.py +1 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/agents.py +74 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/compatibility.py +110 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/doctor.py +122 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/install.py +963 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/registry.py +345 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/remove.py +564 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/sync.py +599 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/tui.py +20 -0
- aiaddons-0.1.0/src/aiaddons/cli/commands/update.py +667 -0
- aiaddons-0.1.0/src/aiaddons/cli/exit_codes.py +17 -0
- aiaddons-0.1.0/src/aiaddons/cli/main.py +87 -0
- aiaddons-0.1.0/src/aiaddons/core/__init__.py +1 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/__init__.py +29 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/base.py +38 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/engine.py +97 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/extractor.py +268 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/git.py +163 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/local.py +136 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/models.py +42 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/package.py +94 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/staging.py +97 -0
- aiaddons-0.1.0/src/aiaddons/core/acquisition/url.py +162 -0
- aiaddons-0.1.0/src/aiaddons/core/compatibility/__init__.py +15 -0
- aiaddons-0.1.0/src/aiaddons/core/compatibility/engine.py +365 -0
- aiaddons-0.1.0/src/aiaddons/core/compatibility/models.py +49 -0
- aiaddons-0.1.0/src/aiaddons/core/drift.py +73 -0
- aiaddons-0.1.0/src/aiaddons/core/exceptions.py +119 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/__init__.py +37 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/engine.py +1730 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/external/__init__.py +27 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/external/models.py +47 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/external/runner.py +165 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/external/runtimes.py +136 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/external/security.py +115 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/models.py +44 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/primitives.py +213 -0
- aiaddons-0.1.0/src/aiaddons/core/execution/security.py +82 -0
- aiaddons-0.1.0/src/aiaddons/core/health/__init__.py +17 -0
- aiaddons-0.1.0/src/aiaddons/core/health/engine.py +1144 -0
- aiaddons-0.1.0/src/aiaddons/core/health/models.py +75 -0
- aiaddons-0.1.0/src/aiaddons/core/installer/__init__.py +47 -0
- aiaddons-0.1.0/src/aiaddons/core/installer/engine.py +515 -0
- aiaddons-0.1.0/src/aiaddons/core/installer/models.py +596 -0
- aiaddons-0.1.0/src/aiaddons/core/models/__init__.py +47 -0
- aiaddons-0.1.0/src/aiaddons/core/models/agent.py +63 -0
- aiaddons-0.1.0/src/aiaddons/core/models/manifest.py +448 -0
- aiaddons-0.1.0/src/aiaddons/core/models/stack.py +117 -0
- aiaddons-0.1.0/src/aiaddons/core/secrets/__init__.py +29 -0
- aiaddons-0.1.0/src/aiaddons/core/secrets/models.py +52 -0
- aiaddons-0.1.0/src/aiaddons/core/secrets/resolver.py +472 -0
- aiaddons-0.1.0/src/aiaddons/core/sync/__init__.py +21 -0
- aiaddons-0.1.0/src/aiaddons/core/sync/engine.py +601 -0
- aiaddons-0.1.0/src/aiaddons/core/sync/models.py +106 -0
- aiaddons-0.1.0/src/aiaddons/core/update/__init__.py +6 -0
- aiaddons-0.1.0/src/aiaddons/core/update/engine.py +501 -0
- aiaddons-0.1.0/src/aiaddons/core/update/models.py +78 -0
- aiaddons-0.1.0/src/aiaddons/core/verification/__init__.py +16 -0
- aiaddons-0.1.0/src/aiaddons/core/verification/engine.py +916 -0
- aiaddons-0.1.0/src/aiaddons/core/verification/models.py +51 -0
- aiaddons-0.1.0/src/aiaddons/integrations/__init__.py +15 -0
- aiaddons-0.1.0/src/aiaddons/integrations/base.py +38 -0
- aiaddons-0.1.0/src/aiaddons/integrations/cli_tool.py +97 -0
- aiaddons-0.1.0/src/aiaddons/integrations/mcp.py +190 -0
- aiaddons-0.1.0/src/aiaddons/integrations/plugin.py +241 -0
- aiaddons-0.1.0/src/aiaddons/integrations/skill.py +128 -0
- aiaddons-0.1.0/src/aiaddons/registry/__init__.py +22 -0
- aiaddons-0.1.0/src/aiaddons/registry/cache.py +126 -0
- aiaddons-0.1.0/src/aiaddons/registry/client.py +85 -0
- aiaddons-0.1.0/src/aiaddons/registry/loader.py +103 -0
- aiaddons-0.1.0/src/aiaddons/registry/models.py +45 -0
- aiaddons-0.1.0/src/aiaddons/registry/registry.py +179 -0
- aiaddons-0.1.0/src/aiaddons/registry/validator.py +123 -0
- aiaddons-0.1.0/src/aiaddons/state/__init__.py +21 -0
- aiaddons-0.1.0/src/aiaddons/state/lockfile.py +136 -0
- aiaddons-0.1.0/src/aiaddons/state/locking.py +55 -0
- aiaddons-0.1.0/src/aiaddons/state/store.py +158 -0
- aiaddons-0.1.0/src/aiaddons/state/transaction.py +136 -0
- aiaddons-0.1.0/src/aiaddons/tui/__init__.py +5 -0
- aiaddons-0.1.0/src/aiaddons/tui/app.py +1010 -0
- aiaddons-0.1.0/src/aiaddons/tui/screens/__init__.py +17 -0
- aiaddons-0.1.0/src/aiaddons/tui/screens/health.py +266 -0
- aiaddons-0.1.0/src/aiaddons/tui/screens/modals.py +314 -0
- aiaddons-0.1.0/src/aiaddons/tui/screens/sync.py +387 -0
- aiaddons-0.1.0/tests/__init__.py +1 -0
- aiaddons-0.1.0/tests/conftest.py +132 -0
- aiaddons-0.1.0/tests/fixtures/__init__.py +1 -0
- aiaddons-0.1.0/tests/fixtures/ponytail_manifests.py +196 -0
- aiaddons-0.1.0/tests/integration/__init__.py +1 -0
- aiaddons-0.1.0/tests/integration/test_antigravity_integration.py +437 -0
- aiaddons-0.1.0/tests/integration/test_batch_install_integration.py +180 -0
- aiaddons-0.1.0/tests/integration/test_install_remove_cycle.py +263 -0
- aiaddons-0.1.0/tests/integration/test_mcp_secrets_across_agents.py +141 -0
- aiaddons-0.1.0/tests/integration/test_registry_validation.py +146 -0
- aiaddons-0.1.0/tests/integration/test_sync_integration.py +221 -0
- aiaddons-0.1.0/tests/integration/test_update_integration.py +242 -0
- aiaddons-0.1.0/tests/unit/__init__.py +1 -0
- aiaddons-0.1.0/tests/unit/test_agent_detection.py +212 -0
- aiaddons-0.1.0/tests/unit/test_agent_utils.py +69 -0
- aiaddons-0.1.0/tests/unit/test_antigravity_adapter.py +286 -0
- aiaddons-0.1.0/tests/unit/test_archive_extractor.py +182 -0
- aiaddons-0.1.0/tests/unit/test_batch_install.py +582 -0
- aiaddons-0.1.0/tests/unit/test_cli.py +41 -0
- aiaddons-0.1.0/tests/unit/test_cli_agents.py +73 -0
- aiaddons-0.1.0/tests/unit/test_cli_check.py +84 -0
- aiaddons-0.1.0/tests/unit/test_cli_install.py +152 -0
- aiaddons-0.1.0/tests/unit/test_cli_registry.py +161 -0
- aiaddons-0.1.0/tests/unit/test_cli_remove.py +637 -0
- aiaddons-0.1.0/tests/unit/test_cli_sync.py +765 -0
- aiaddons-0.1.0/tests/unit/test_cli_update.py +627 -0
- aiaddons-0.1.0/tests/unit/test_compatibility.py +725 -0
- aiaddons-0.1.0/tests/unit/test_execution_engine.py +425 -0
- aiaddons-0.1.0/tests/unit/test_execution_primitives.py +106 -0
- aiaddons-0.1.0/tests/unit/test_execution_security.py +85 -0
- aiaddons-0.1.0/tests/unit/test_external_execution.py +203 -0
- aiaddons-0.1.0/tests/unit/test_installer_engine.py +246 -0
- aiaddons-0.1.0/tests/unit/test_installer_models.py +391 -0
- aiaddons-0.1.0/tests/unit/test_mcp_registry_manifests.py +522 -0
- aiaddons-0.1.0/tests/unit/test_phase5b10_cli.py +346 -0
- aiaddons-0.1.0/tests/unit/test_phase5b10_tui.py +98 -0
- aiaddons-0.1.0/tests/unit/test_phase5b3_installation.py +404 -0
- aiaddons-0.1.0/tests/unit/test_phase5b9_verification.py +657 -0
- aiaddons-0.1.0/tests/unit/test_phase5b_adapters.py +203 -0
- aiaddons-0.1.0/tests/unit/test_phase5b_secrets.py +553 -0
- aiaddons-0.1.0/tests/unit/test_phase5b_skills.py +208 -0
- aiaddons-0.1.0/tests/unit/test_phase5b_transactions.py +210 -0
- aiaddons-0.1.0/tests/unit/test_phase6_doctor_cli.py +208 -0
- aiaddons-0.1.0/tests/unit/test_phase6_health_engine.py +573 -0
- aiaddons-0.1.0/tests/unit/test_phase6_health_models.py +91 -0
- aiaddons-0.1.0/tests/unit/test_phase6a_registry_cache.py +138 -0
- aiaddons-0.1.0/tests/unit/test_phase6a_registry_cli.py +185 -0
- aiaddons-0.1.0/tests/unit/test_phase6a_registry_client.py +152 -0
- aiaddons-0.1.0/tests/unit/test_phase6a_registry_models.py +208 -0
- aiaddons-0.1.0/tests/unit/test_phase6a_security.py +97 -0
- aiaddons-0.1.0/tests/unit/test_phase6c_source_binding.py +615 -0
- aiaddons-0.1.0/tests/unit/test_ponytail_validation.py +711 -0
- aiaddons-0.1.0/tests/unit/test_post_install_consistency.py +635 -0
- aiaddons-0.1.0/tests/unit/test_registry.py +364 -0
- aiaddons-0.1.0/tests/unit/test_secret_confirmation.py +509 -0
- aiaddons-0.1.0/tests/unit/test_skills_plugins_manifests.py +290 -0
- aiaddons-0.1.0/tests/unit/test_source_acquisition.py +379 -0
- aiaddons-0.1.0/tests/unit/test_state_locking.py +203 -0
- aiaddons-0.1.0/tests/unit/test_sync_engine.py +635 -0
- aiaddons-0.1.0/tests/unit/test_tui_features.py +710 -0
- aiaddons-0.1.0/tests/unit/test_update_engine.py +629 -0
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Python-generated files
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[oc]
|
|
4
|
+
build/
|
|
5
|
+
dist/
|
|
6
|
+
wheels/
|
|
7
|
+
*.egg-info
|
|
8
|
+
|
|
9
|
+
# Virtual environments
|
|
10
|
+
.venv
|
|
11
|
+
|
|
12
|
+
uv.lock
|
|
13
|
+
|
|
14
|
+
# Agent configs & workspace local data
|
|
15
|
+
.claude.json
|
|
16
|
+
.claude/
|
|
17
|
+
.agents/
|
|
18
|
+
.codex/
|
|
19
|
+
aiaddons.lock
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.12
|
aiaddons-0.1.0/AGENTS.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# AGENTS.md - Engineering Rules & Guidelines for AI Add-ons Manager (`aiaddons`)
|
|
2
|
+
|
|
3
|
+
This document defines the mandatory engineering standards, architectural constraints, and coding guidelines for AI Add-ons Manager (`aiaddons`). All developers and AI coding agents working on this project MUST strictly adhere to these rules.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Project Structure Standards
|
|
8
|
+
- Use the standard **`src/` layout** (PEP 621): `src/aiaddons/`.
|
|
9
|
+
- Maintain strict modularity across subpackages:
|
|
10
|
+
- `cli/`: Non-interactive CLI commands (Typer + Rich).
|
|
11
|
+
- `tui/`: Textual interactive terminal UI screens, widgets, and app controllers.
|
|
12
|
+
- `core/`: Pure domain models, compatibility resolver, and transactional installer logic.
|
|
13
|
+
- `agents/`: Agent detection and adapter implementations (Claude Code, Codex).
|
|
14
|
+
- `integrations/`: Integration type handlers (MCP, Skill, Plugin, CLI Tool).
|
|
15
|
+
- `registry/`: Registry fetching, schema validation, and security sanitization.
|
|
16
|
+
- `state/`: Local installation state database and `aiaddons.lock` lockfile management.
|
|
17
|
+
- Tests must be organized under `tests/unit/`, `tests/integration/`, and `tests/fixtures/`.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 2. Modular Architecture & Abstraction
|
|
22
|
+
- Use Python `Protocol` or `ABC` interfaces for all extensible components (`BaseAgentAdapter`, `BaseIntegrationHandler`).
|
|
23
|
+
- The domain core (`core/`) MUST NOT import or depend on UI components (`tui/`, `cli/`).
|
|
24
|
+
- Adapters and Handlers must be completely decoupled from presentation logic. They take data models as input and return typed result objects (`ActionResult`, `AgentDetectionResult`).
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 3. Registry-Driven Design (No Hard-coded Add-ons)
|
|
29
|
+
- **CRITICAL**: DO NOT hard-code individual add-ons, MCP servers, or skills into Python code or classes.
|
|
30
|
+
- Integrations MUST be defined dynamically as JSON/YAML metadata conforming to `IntegrationManifest`.
|
|
31
|
+
- Adding a new integration to the ecosystem must require ONLY adding a manifest entry to a registry—NEVER modifying Python source code.
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 4. Agent Adapter Constraints (Claude Code & Codex)
|
|
36
|
+
- All agent adapters must implement `BaseAgentAdapter`.
|
|
37
|
+
- Adapters must safely handle both **Global** scope (`~/.claude.json`, `~/.codex/`) and **Workspace** scope (`.claude/`, `.agents/`).
|
|
38
|
+
- File modifications to agent configurations MUST be atomic (read -> update dict -> write to temporary file -> atomic rename).
|
|
39
|
+
- Adapter detection must check both executable presence in `PATH` (`shutil.which`) and configuration directory existence.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 5. MCP and Skills Integration Guidelines
|
|
44
|
+
- **MCP Servers**:
|
|
45
|
+
- MCP handlers build and inject `mcpServers` configuration objects into agent config files.
|
|
46
|
+
- MCP servers must NEVER be launched directly by `aiaddons` as unmanaged background daemons.
|
|
47
|
+
- Environment variables required by MCP servers must be clearly declared with `required` and `secret` flags.
|
|
48
|
+
- **Agent Skills**:
|
|
49
|
+
- Skills must be validated against `SKILL.md` frontmatter rules before installation.
|
|
50
|
+
- Skill deployment must safely copy/link directory contents into agent-specific skill locations (`.claude/skills/`, `.agents/skills/`).
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 6. Security & Command Execution Guardrails
|
|
55
|
+
- **No Arbitrary Shell Execution**:
|
|
56
|
+
- NEVER execute arbitrary shell commands or scripts specified in registry metadata.
|
|
57
|
+
- Subprocess calls MUST NEVER use `shell=True`. All invocations must use explicit argument lists: `["npx", "-y", "@scope/package"]`.
|
|
58
|
+
- **Executable Whitelist**:
|
|
59
|
+
- Only pre-approved runtime binaries (`npx`, `uvx`, `python`, `node`, `pip`, `git`) listed in `allowed_executables` may be executed.
|
|
60
|
+
- **Command Sanitization**:
|
|
61
|
+
- Reject any registry manifest containing shell operators: `;`, `&&`, `||`, `|`, `>`, `<`, `$()`, backticks, or environment variable expansions.
|
|
62
|
+
- **Checksum Verification**:
|
|
63
|
+
- Downloads (zip archives, git bundles) MUST be validated against cryptographic SHA-256 hashes defined in the manifest.
|
|
64
|
+
- **Secret Protection**:
|
|
65
|
+
- Sensitive inputs (API keys, personal access tokens) MUST be flagged `secret: true`, masked in UI/logs, and stored safely.
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 7. Dependency Management & Packaging
|
|
70
|
+
- Managed via `pyproject.toml` using `hatchling` as the build backend.
|
|
71
|
+
- Core runtime dependencies must remain minimal:
|
|
72
|
+
- `typer` (CLI)
|
|
73
|
+
- `rich` (Formatting)
|
|
74
|
+
- `textual` (TUI)
|
|
75
|
+
- `pydantic` v2 (Validation & Schemas)
|
|
76
|
+
- `httpx` (Async HTTP)
|
|
77
|
+
- `packaging` (SemVer checks)
|
|
78
|
+
- Avoid adding unnecessary external packages. Favor standard library (`pathlib`, `json`, `shutil`, `typing`, `hashlib`, `subprocess`).
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 8. Type Hints & Code Quality
|
|
83
|
+
- Strict static typing is required everywhere. All function parameters and return values must have explicit type annotations.
|
|
84
|
+
- Use Python 3.11+ type syntax (`list[str]`, `dict[str, Any]`, `str | None`).
|
|
85
|
+
- No implicit `Any` types in domain models.
|
|
86
|
+
- Core code must pass static type checking without errors (`mypy --strict`).
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## 9. Error Handling & Transactional Rollbacks
|
|
91
|
+
- Create a dedicated exception hierarchy inheriting from `AIAddonsError`:
|
|
92
|
+
- `RegistryFetchError`
|
|
93
|
+
- `ManifestValidationError`
|
|
94
|
+
- `IncompatibleAgentError`
|
|
95
|
+
- `SecurityValidationError`
|
|
96
|
+
- `InstallationError`
|
|
97
|
+
- Multi-step installations must use an `InstallPlan` with a `RollbackStack`. If step $N$ fails, steps $N-1$ down to $1$ must execute their `undo()` handler to leave the host system clean.
|
|
98
|
+
- Never swallow exceptions silently. All errors reported to the user in CLI/TUI must be clear, actionable, and user-friendly.
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 10. Logging & Auditing
|
|
103
|
+
- Use structured logging via standard `logging`.
|
|
104
|
+
- Log files must be stored in the app data directory (`~/.aiaddons/logs/aiaddons.log`).
|
|
105
|
+
- **NEVER** write plain-text secrets, passwords, or tokens to log files. Filter or mask all secret values.
|
|
106
|
+
|
|
107
|
+
---
|
|
108
|
+
|
|
109
|
+
## 11. Testing Requirements
|
|
110
|
+
- Unit tests (`pytest`) are required for:
|
|
111
|
+
- Manifest parsing and Pydantic schema validation.
|
|
112
|
+
- SemVer and OS compatibility resolution.
|
|
113
|
+
- Security command sanitizer and whitelist verifier.
|
|
114
|
+
- JSON configuration diffing and atomic updates.
|
|
115
|
+
- Mock all file system writes and subprocess executions in unit tests using `pytest` fixtures (`tmp_path`, `monkeypatch`, `unittest.mock`).
|
|
116
|
+
- Use Textual's `App.run_test()` harness for UI testing.
|
aiaddons-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Anuj04432
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
aiaddons-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: aiaddons
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: AI Add-ons Manager - Package & Integration Manager for AI Agents
|
|
5
|
+
Author-email: Anuj04432 <anujwagmore835@gmail.com>
|
|
6
|
+
License-Expression: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Requires-Python: >=3.11
|
|
9
|
+
Requires-Dist: filelock>=3.13.0
|
|
10
|
+
Requires-Dist: httpx>=0.27.0
|
|
11
|
+
Requires-Dist: packaging>=23.0
|
|
12
|
+
Requires-Dist: pydantic>=2.0.0
|
|
13
|
+
Requires-Dist: pyyaml>=6.0
|
|
14
|
+
Requires-Dist: rich>=13.0.0
|
|
15
|
+
Requires-Dist: textual>=0.50.0
|
|
16
|
+
Requires-Dist: typer>=0.12.0
|
|
17
|
+
Provides-Extra: dev
|
|
18
|
+
Requires-Dist: mypy>=1.8.0; extra == 'dev'
|
|
19
|
+
Requires-Dist: pytest>=8.0.0; extra == 'dev'
|
|
20
|
+
Requires-Dist: ruff>=0.3.0; extra == 'dev'
|
|
21
|
+
Requires-Dist: types-pyyaml>=6.0.0; extra == 'dev'
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# AI Add-ons Manager (`aiaddons`)
|
|
25
|
+
|
|
26
|
+
> **Declarative, security-hardened, transactional package manager for AI coding agents.**
|
|
27
|
+
|
|
28
|
+
[](https://www.python.org/downloads/)
|
|
29
|
+
[]()
|
|
30
|
+
[]()
|
|
31
|
+
[](https://github.com/astral-sh/ruff)
|
|
32
|
+
[](pyproject.toml)
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## What is `aiaddons`?
|
|
37
|
+
|
|
38
|
+
**`aiaddons`** is an open-source, declarative package and integration manager designed specifically for AI coding agents, including **Anthropic Claude Code**, **OpenAI Codex**, and **Antigravity CLI**. Just as `pip` manages Python dependencies and `npm` manages Node packages, `aiaddons` automates the discovery, compatibility evaluation, acquisition, configuration injection, verification, and lifecycle management of tools and extensions that AI agents require.
|
|
39
|
+
|
|
40
|
+
Modern AI coding agents rely on a growing ecosystem of external capabilities. `aiaddons` standardizes these extensions into four first-class integration primitives:
|
|
41
|
+
|
|
42
|
+
* **Model Context Protocol (MCP) Servers**: Standardized tools and data connectors (e.g. GitHub, PostgreSQL, Brave Search) configured dynamically via `npx`, `uvx`, `node`, or `python` runtimes.
|
|
43
|
+
* **Agent Skills**: Prompt templates, specialized instructions, and reusable workflow bundles (centered around `SKILL.md` specifications) deployed directly to agent skill paths.
|
|
44
|
+
* **Composite Plugins**: Multi-component packages combining MCP servers, skills, and CLI tools under unified configuration boundaries.
|
|
45
|
+
* **CLI Tools**: Verified external system binaries and developer utilities required by agents.
|
|
46
|
+
|
|
47
|
+
`aiaddons` supports dual-scope installation: **Global** (`~/.claude.json`, `~/.codex/`, `~/.gemini/config/mcp_config.json`) for user-wide agent availability, and **Workspace** (`.claude.json`, `.agents/`, `aiaddons.lock`) for team-level, reproducible project environments checked into source control.
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Why It's Safe
|
|
52
|
+
|
|
53
|
+
Registry manifests describe **WHAT** an add-on is; trusted application code determines **HOW** it is installed, updated, or removed. `aiaddons` enforces a defense-in-depth security model to eliminate supply-chain and execution vulnerabilities:
|
|
54
|
+
|
|
55
|
+
| Security Mechanism | Implementation in Codebase | Security Guarantee |
|
|
56
|
+
| :--- | :--- | :--- |
|
|
57
|
+
| **No Arbitrary Shell Execution** | `ExternalRunner` (`subprocess.Popen(shell=False)`) | Subprocess execution uses strictly typed argument vectors (`list[str]`). Shell interpreters (`bash -c`, `cmd.exe /c`, `powershell`) and arbitrary execution scripts in manifests are prohibited. |
|
|
58
|
+
| **Runtime & Binary Allowlist** | `ALLOWED_RUNTIMES`, `ALLOWED_EXECUTABLES`, `validate_runtime_name` | Only pre-approved runtime binaries (`npx`, `uvx`, `pip`, `npm`, `git`, `python`, `node`) resolved dynamically via `shutil.which` are permitted. |
|
|
59
|
+
| **Argument & Parameter Sanitization** | `validate_argument_vector`, `validate_mcp_package_name`, `FORBIDDEN_SHELL_PATTERNS` | Rejects shell metacharacters (`;`, `&&`, `\|\|`, `\|`, `>`, `<`, `$`, `` ` ``), forbidden evaluation flags (`--eval`, `-e`, `-c`, `--exec`), null bytes (`\0`), and malformed package identifiers. |
|
|
60
|
+
| **Boundary Confinement & Traversal Protection** | `verify_safe_target_path`, `validate_safe_relative_path`, `verify_path_security` | Confines all disk writes within designated `target_root` directories. Prohibits parent traversal (`..`), absolute path overrides, Windows drive letters, UNC shares (`\\server\share`), URL-encoded paths (`%2e%2e`), and escaping symlinks. |
|
|
61
|
+
| **Write-Ahead Log (WAL) & Rollbacks** | `TransactionWALManager`, `ExecutionEngine._rollback_executed_stack` | Every installation, update, and removal transitions through durable WAL phases (`REQUESTED` → `PLANNED` → `EXECUTING` → `VERIFIED` → `COMMITTED`). Failures trigger an atomic `RollbackAction` stack. Interrupted transactions are automatically detected and recovered. |
|
|
62
|
+
| **In-Memory Secret Protection** | `SecretResolver`, `mask_secrets_in_text`, `validate_env_var_name` | Manifests declare secret requirements (`secret: true`) without storing plaintext values. Secrets are resolved in-memory via `getpass` prompts or environment variables, masked as `***MASKED***` across logs and output, and blocked from restricted variables (`LD_PRELOAD`, `PYTHONPATH`, `PATH`). Features soft warnings on malformed secrets, masked preview after entry, and live asterisk feedback on Windows. |
|
|
63
|
+
| **Configuration Drift Detection** | `detect_installation_drift` | Compares live agent configuration files and filesystem contents against recorded states to warn before mutating or removing modified integrations. |
|
|
64
|
+
| **Post-Operation Verification** | `VerificationEngine.verify_plan`, `verify_rollback` | Independent observer verifies that files, hashes (`sha256:`), and JSON/YAML configuration entries match expected values before committing transactions. |
|
|
65
|
+
| **Atomic Persistence** | `_atomic_write_file` (with `os.fsync` and atomic tempfile replacement) | Guarantees that local state database (`~/.aiaddons/state.json`) and workspace lockfiles (`aiaddons.lock`) cannot be corrupted by abrupt terminations or disk errors. |
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## Architecture
|
|
70
|
+
|
|
71
|
+
`aiaddons` is designed with a decoupled, domain-driven core where presentation layers (CLI & TUI) delegate directly to verified business engines:
|
|
72
|
+
|
|
73
|
+
```mermaid
|
|
74
|
+
flowchart TD
|
|
75
|
+
User([User / Terminal]) --> UI[Presentation Layer<br/><code>Typer CLI</code> / <code>Textual TUI</code>]
|
|
76
|
+
UI --> AppUI[TUI Screens & Modals<br/><code>HealthScreen</code> / <code>SyncScreen</code> / <code>ConfirmModals</code>]
|
|
77
|
+
UI --> Compat[CompatibilityEngine<br/><i>Agent Detection & Constraint Evaluation</i>]
|
|
78
|
+
UI --> Health[HealthCheckEngine<br/><i>9-Category Diagnostics</i>]
|
|
79
|
+
UI --> Sync[SyncEngine<br/><i>Lockfile Diffing & Workspace Reconciliation</i>]
|
|
80
|
+
UI --> Update[UpdateEngine<br/><i>Version Evaluation & Upgrade Planning</i>]
|
|
81
|
+
UI --> Drift[Drift Detection<br/><i>Configuration & Filesystem Drift Inspector</i>]
|
|
82
|
+
|
|
83
|
+
Compat --> PlanEng[InstallationEngine<br/><i>Plan & Removal Generation</i>]
|
|
84
|
+
Sync --> PlanEng
|
|
85
|
+
Update --> PlanEng
|
|
86
|
+
PlanEng --> AcqEng[AcquisitionEngine<br/><i>Source Fetching: Git / Package / URL / Local</i>]
|
|
87
|
+
AcqEng --> ExecEng[ExecutionEngine<br/><i>Atomic Primitives & ExternalRunner</i>]
|
|
88
|
+
ExecEng --> Secret[SecretResolver<br/><i>In-Memory Resolution & Masking</i>]
|
|
89
|
+
ExecEng --> VerifyEng[VerificationEngine<br/><i>Host State & Rollback Inspection</i>]
|
|
90
|
+
VerifyEng -- Verification Success --> State[InstalledStateStore & LockfileManager<br/><code>~/.aiaddons/state.json</code> & <code>aiaddons.lock</code>]
|
|
91
|
+
ExecEng -. Write-Ahead Logging .-> WAL[TransactionWALManager<br/><code>~/.aiaddons/transactions/*.json</code>]
|
|
92
|
+
ExecEng -. Failure / Verification Error .-> Rollback[Rollback Stack<br/><i>Reverse Atomic Operations</i>]
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Core Components
|
|
96
|
+
|
|
97
|
+
* **`CompatibilityEngine`**: Evaluates target agent support, scope constraints, agent capabilities (`mcp`, `skill`), host OS matching, and CLI prerequisites.
|
|
98
|
+
* **`InstallationEngine`**: Generates immutable `InstallationPlan` and removal plan structures containing declarative, typed operations (`CreateDirectoryOperation`, `WriteFileOperation`, `ModifyJsonOperation`, `AddMcpServerOperation`, `AddSkillOperation`, etc.).
|
|
99
|
+
* **`UpdateEngine`**: Evaluates newer manifest versions and coordinates transactional atomic updates and version swaps with rollback safety.
|
|
100
|
+
* **`SyncEngine`**: Computes declarative diffs between workspace lockfiles (`aiaddons.lock`) or stack files and local environments, orchestrating installs, updates, and prunes.
|
|
101
|
+
* **`HealthCheckEngine`**: Runs 9-category system diagnostics across CLI tools, agent configs, state stores, lockfiles, WAL transactions, and disk security.
|
|
102
|
+
* **`Drift Detection`**: Detects external tampering or manual edits to agent configuration files or installed assets before removals and updates.
|
|
103
|
+
* **`AcquisitionEngine`**: Coordinates source acquisition into isolated staging environments (`~/.aiaddons/staging/`) with cryptographic checksum verification (`sha256:`).
|
|
104
|
+
* **`ExecutionEngine`**: Executes atomic file primitives and external package managers with timeout controls, strict argument vectors, and rollback tracking.
|
|
105
|
+
* **`VerificationEngine`**: Inspects resulting filesystem artifacts and agent configuration files, guaranteeing state integrity prior to commit.
|
|
106
|
+
* **`InstalledStateStore` & `LockfileManager`**: Tracks installed add-ons globally (`state.json`) and per-workspace (`aiaddons.lock`).
|
|
107
|
+
* **`TransactionWALManager`**: Persists durable transaction records for crash recovery and auditability.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Installation
|
|
112
|
+
|
|
113
|
+
### Prerequisites
|
|
114
|
+
|
|
115
|
+
* **Python**: `3.11` or higher
|
|
116
|
+
* **Target AI Coding Agent** (at least one installed):
|
|
117
|
+
* [Claude Code](https://docs.anthropic.com/en/docs/agents-and-tools/claude-code/overview) (`claude`)
|
|
118
|
+
* [OpenAI Codex](https://github.com/openai/codex) (`codex`)
|
|
119
|
+
* Antigravity CLI (`agy` / `antigravity`)
|
|
120
|
+
* **Optional Runtime Binaries**: `git`, `npx` / `node`, `uvx` / `python`, `pip`
|
|
121
|
+
|
|
122
|
+
### Install from Source
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Clone repository
|
|
126
|
+
git clone https://github.com/Anuj04432/AI-Add-ons-Manager.git
|
|
127
|
+
cd AI-Add-ons-Manager
|
|
128
|
+
|
|
129
|
+
# Standard editable install via pip
|
|
130
|
+
pip install -e .
|
|
131
|
+
|
|
132
|
+
# Or using uv (recommended for ultra-fast setup)
|
|
133
|
+
uv pip install -e .
|
|
134
|
+
|
|
135
|
+
# For development dependencies (pytest, mypy, ruff)
|
|
136
|
+
pip install -e ".[dev]"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Verify your installation:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
aiaddons --version
|
|
143
|
+
aiaddons agents
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## Quickstart
|
|
149
|
+
|
|
150
|
+
### 1. Batch Install Add-ons (Core Value Proposition)
|
|
151
|
+
|
|
152
|
+
Install multiple MCP servers, skills, and plugins across your workspace in a single transactional command:
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
# Install multiple add-ons at once for detected agents
|
|
156
|
+
aiaddons install github-mcp postgres-mcp code-reviewer caveman --scope workspace
|
|
157
|
+
|
|
158
|
+
# Or declare your entire team stack in a YAML/JSON file and install it in one step:
|
|
159
|
+
aiaddons install --file team-stack.yaml
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
> [!TIP]
|
|
163
|
+
> **Configuring Required Secrets (API Keys & Tokens)**
|
|
164
|
+
>
|
|
165
|
+
> When installing add-ons that require credentials (such as `GITHUB_TOKEN` for `github-mcp`), `aiaddons` prompts for masked, no-echo terminal input.
|
|
166
|
+
> - **Windows Paste Support**: Supports pasting tokens via <kbd>Ctrl</kbd>+<kbd>V</kbd> into masked password prompts on Windows PowerShell, CMD, and Windows Terminal.
|
|
167
|
+
> - **Environment Variable Alternative**: You can also pre-set secrets in your shell environment before running `install` (especially convenient for long tokens or automated CI runs):
|
|
168
|
+
> - **Windows PowerShell**: `$env:GITHUB_TOKEN = "ghp_your_token_value"`
|
|
169
|
+
> - **Linux / macOS (Bash/Zsh)**: `export GITHUB_TOKEN="ghp_your_token_value"`
|
|
170
|
+
> - **Windows CMD**: `set GITHUB_TOKEN=ghp_your_token_value`
|
|
171
|
+
|
|
172
|
+
### 2. Workspace Lockfile Synchronization
|
|
173
|
+
|
|
174
|
+
When cloning a repository with an existing `aiaddons.lock`, synchronize your agent environment with zero manual configuration:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# Fresh clone bootstrap: installs all declared add-ons automatically
|
|
178
|
+
aiaddons sync
|
|
179
|
+
|
|
180
|
+
# Reconcile local environment: install missing, update mismatched, and prune extra add-ons
|
|
181
|
+
aiaddons sync --prune --update
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
> [!NOTE]
|
|
185
|
+
> **Committing `aiaddons.lock`**
|
|
186
|
+
> End users of `aiaddons` are encouraged to commit `aiaddons.lock` to their own project's version control to guarantee a reproducible team stack of AI agent capabilities. However, if you are developing or testing `aiaddons` *itself* (i.e., within this repository), `aiaddons.lock` is explicitly `.gitignore`d to prevent local test fixtures and experimental installations from polluting the main project history.
|
|
187
|
+
|
|
188
|
+
### 3. Update & Version Upgrades
|
|
189
|
+
|
|
190
|
+
Keep your AI agent capabilities up to date with automated SemVer checks and atomic rollback safety:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Update all installed add-ons with newer registry versions available
|
|
194
|
+
aiaddons update --all
|
|
195
|
+
|
|
196
|
+
# Or update a specific add-on to a target version
|
|
197
|
+
aiaddons update github-mcp --version 1.3.0
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
### 4. Search, Inspect & Evaluate Compatibility
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
# Search available add-ons
|
|
204
|
+
aiaddons search mcp
|
|
205
|
+
|
|
206
|
+
# Inspect metadata and configuration requirements
|
|
207
|
+
aiaddons info github-mcp
|
|
208
|
+
|
|
209
|
+
# Check compatibility against detected local AI agents (read-only)
|
|
210
|
+
aiaddons check github-mcp --scope workspace
|
|
211
|
+
|
|
212
|
+
# Preview installation operations without applying changes
|
|
213
|
+
aiaddons install github-mcp --dry-run
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
### 5. Diagnostics & Interactive TUI
|
|
217
|
+
|
|
218
|
+
```bash
|
|
219
|
+
# Run 9-category system diagnostics and health checks
|
|
220
|
+
aiaddons doctor
|
|
221
|
+
|
|
222
|
+
# Launch the interactive terminal user interface
|
|
223
|
+
aiaddons tui
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
---
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
## Registry & Available Add-ons
|
|
230
|
+
|
|
231
|
+
The built-in registry currently provides **30 integrations** out of the box, covering a wide spectrum of tools for AI agents. Since the last major update, the registry has been expanded significantly:
|
|
232
|
+
|
|
233
|
+
* **Newly Added MCP Servers**: `stripe-mcp`, `sentry-mcp`, `supabase-mcp`, `firecrawl-mcp`, `sequential-thinking-mcp`, `notion-mcp`, `figma-mcp`, `github-mcp`, `postgres-mcp`, `brave-search-mcp`, `filesystem-mcp`, `playwright-mcp`, `context7-mcp`
|
|
234
|
+
* **Agent Skills**: Dozens of workflow skills including `caveman`, `ponytail-audit-skill`, and other behavioral tools.
|
|
235
|
+
|
|
236
|
+
Additionally, `aiaddons` includes **2 pre-configured stacks** (`dev-starter-stack.yaml`, `agent-behavior-stack.yaml`) in `registry/stacks/` to help quickly bootstrap a team environment.
|
|
237
|
+
|
|
238
|
+
## Interactive Terminal UI (TUI)
|
|
239
|
+
|
|
240
|
+
`aiaddons` provides a rich, responsive Textual-powered terminal user interface accessible via `aiaddons tui`.
|
|
241
|
+
|
|
242
|
+
```text
|
|
243
|
+
┌─────────────────────────┬────────────────────────────────────────────────────────┐
|
|
244
|
+
│ Add-ons Registry │ GitHub MCP Server (v1.2.0) │
|
|
245
|
+
│ 🔍 [Search... ] │ Model Context Protocol server for searching code... │
|
|
246
|
+
│ │ │
|
|
247
|
+
│ ◉ github-mcp [MCP] │ Status: ✓ Installed (Workspace) │
|
|
248
|
+
│ ○ postgres-mcp [MCP] │ Agent: Claude Code │
|
|
249
|
+
│ ○ code-reviewer [SKILL]│ │
|
|
250
|
+
│ ○ refactor-skill [SKILL]│ [H] Health [S] Sync [I] Install [R] Remove [U] Upd │
|
|
251
|
+
└─────────────────────────┴────────────────────────────────────────────────────────┘
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### TUI Keybindings & Controls
|
|
255
|
+
|
|
256
|
+
| Key | Action | Description |
|
|
257
|
+
| :--- | :--- | :--- |
|
|
258
|
+
| <kbd>H</kbd> | **Health Check** | Opens **`HealthScreen`** to run and view real-time diagnostics across all 9 categories. |
|
|
259
|
+
| <kbd>S</kbd> | **Sync Workspace** | Opens **`SyncScreen`** to inspect `aiaddons.lock` diffs (missing, extra, mismatched) and reconcile. |
|
|
260
|
+
| <kbd>I</kbd> | **Install** | Installs selected add-on with interactive secret inputs and transactional commit. |
|
|
261
|
+
| <kbd>R</kbd> | **Remove** | Opens **`RemoveConfirmModal`** or **`DriftConfirmModal`** (if files were modified) to safely uninstall. |
|
|
262
|
+
| <kbd>U</kbd> | **Update** | Checks for newer versions and opens **`UpdatePlanModal`** for version-swap previews. |
|
|
263
|
+
| <kbd>C</kbd> | **Check Compat** | Evaluates compatibility in read-only mode and displays requirement details. |
|
|
264
|
+
| <kbd>P</kbd> | **Preview Plan** | Generates a dry-run plan showing exact operations without changing system state. |
|
|
265
|
+
| <kbd>Q</kbd> | **Quit** | Exits the TUI application. |
|
|
266
|
+
|
|
267
|
+
> [!NOTE]
|
|
268
|
+
> **Same Engine, Same Safety**: The TUI is a direct presentation wrapper around the exact same domain engines (`ExecutionEngine`, `TransactionWALManager`, `VerificationEngine`, `LockfileManager`) as the CLI. Every installation, update, and removal in the TUI includes full WAL crash safety, file locking, drift detection, secret masking, and automatic rollback on failure.
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## CLI Reference
|
|
273
|
+
|
|
274
|
+
All commands support `--help` for option descriptions.
|
|
275
|
+
|
|
276
|
+
| Command | Description | Key Options |
|
|
277
|
+
| :--- | :--- | :--- |
|
|
278
|
+
| `aiaddons install [addon-ids...]` | Install one or more add-ons or generate a dry-run installation plan. | `--file` / `-f`, `--scope` / `-s`, `--agent` / `-a`, `--dry-run`, `--yes` / `-y`, `--json` / `-j`, `--registry` / `-r` |
|
|
279
|
+
| `aiaddons remove <addon-id>` | Remove an installed add-on with safety verification and rollback. | `--scope` / `-s`, `--agent` / `-a`, `--dry-run`, `--yes` / `-y`, `--force` / `-f`, `--json` / `-j`, `--registry` / `-r` |
|
|
280
|
+
| `aiaddons update [addon-id]` | Update installed add-on(s) with newer versions and rollback safety. | `--version` / `-v`, `--all` / `-A`, `--scope` / `-s`, `--agent` / `-a`, `--dry-run`, `--yes` / `-y`, `--json` / `-j`, `--registry` / `-r` |
|
|
281
|
+
| `aiaddons sync` | Synchronize workspace with `aiaddons.lock` or stack file. | `--file` / `-f`, `--scope` / `-s`, `--agent` / `-a`, `--prune`, `--update`, `--dry-run`, `--yes` / `-y`, `--json` / `-j`, `--registry` / `-r` |
|
|
282
|
+
| `aiaddons list` | List available add-ons in the registry. | `--type`, `--category`, `--agent`, `--json`, `--registry-dir` |
|
|
283
|
+
| `aiaddons search <query>` | Search add-ons by keyword, tag, ID, or description. | `--json`, `--registry-dir` |
|
|
284
|
+
| `aiaddons info <addon-id>` | Display detailed manifest metadata, publisher trust, and dependencies. | `--json`, `--registry-dir` |
|
|
285
|
+
| `aiaddons check <addon-id>` | Evaluate add-on compatibility against detected AI agents in read-only mode. | `--scope` (`global` \| `workspace`), `--agent`, `--json`, `--registry-dir` |
|
|
286
|
+
| `aiaddons agents` | Detect and display status, version, and config paths for local AI agents. | `--json`, `--project-path` |
|
|
287
|
+
| `aiaddons doctor` | Run comprehensive diagnostics across registry, state, lockfile, WAL, and runtimes. | `--json`, `--project-path` |
|
|
288
|
+
| `aiaddons tui` | Launch the interactive Textual terminal user interface. | `--registry` / `-r` |
|
|
289
|
+
| `aiaddons version` | Print the current `aiaddons` version. | `--version` / `-v` |
|
|
290
|
+
| `aiaddons registry update` | Fetch and validate fresh registry metadata from remote HTTPS endpoint. | `--url`, `--cache-dir` |
|
|
291
|
+
| `aiaddons registry status` | Display cache health, last sync timestamp, and total cached manifests. | `--url`, `--cache-dir`, `--json` |
|
|
292
|
+
| `aiaddons registry list` | List cached add-ons (subcommand alias). | `--type`, `--category`, `--agent`, `--json` |
|
|
293
|
+
| `aiaddons registry search <query>` | Search cached add-ons (subcommand alias). | `--json` |
|
|
294
|
+
| `aiaddons registry info <addon-id>` | Inspect cached add-on details (subcommand alias). | `--json` |
|
|
295
|
+
|
|
296
|
+
---
|
|
297
|
+
|
|
298
|
+
## Authoring a Manifest
|
|
299
|
+
|
|
300
|
+
Add-ons are authored declaratively as YAML or JSON files conforming to the strict Pydantic `IntegrationManifest` schema (`extra = "forbid"`).
|
|
301
|
+
|
|
302
|
+
### Minimal MCP Server Manifest (`github-mcp.yaml`)
|
|
303
|
+
|
|
304
|
+
```yaml
|
|
305
|
+
id: github-mcp
|
|
306
|
+
name: GitHub MCP Server
|
|
307
|
+
version: 1.2.0
|
|
308
|
+
description: Model Context Protocol server for searching code, managing PRs, and inspecting issues.
|
|
309
|
+
documentation_url: https://github.com/modelcontextprotocol/servers
|
|
310
|
+
license: MIT
|
|
311
|
+
category: developer-tools
|
|
312
|
+
integration_type: mcp
|
|
313
|
+
target_agents:
|
|
314
|
+
- claude-code
|
|
315
|
+
- codex
|
|
316
|
+
supported_scopes:
|
|
317
|
+
- global
|
|
318
|
+
- workspace
|
|
319
|
+
source:
|
|
320
|
+
source_type: package
|
|
321
|
+
package_name: "@modelcontextprotocol/server-github"
|
|
322
|
+
checksum: "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
|
|
323
|
+
dependencies:
|
|
324
|
+
- name: npx
|
|
325
|
+
type: cli
|
|
326
|
+
required: true
|
|
327
|
+
trust:
|
|
328
|
+
verification_status: verified
|
|
329
|
+
publisher:
|
|
330
|
+
name: Model Context Protocol Team
|
|
331
|
+
url: https://github.com/modelcontextprotocol
|
|
332
|
+
declared_verified: true
|
|
333
|
+
allowed_executables:
|
|
334
|
+
- npx
|
|
335
|
+
tags:
|
|
336
|
+
- github
|
|
337
|
+
- mcp
|
|
338
|
+
- git
|
|
339
|
+
handler_spec:
|
|
340
|
+
mcp:
|
|
341
|
+
transport: stdio
|
|
342
|
+
runtime: npx
|
|
343
|
+
package_name: "@modelcontextprotocol/server-github"
|
|
344
|
+
env_vars:
|
|
345
|
+
- name: GITHUB_PERSONAL_ACCESS_TOKEN
|
|
346
|
+
required: true
|
|
347
|
+
secret: true
|
|
348
|
+
description: GitHub Personal Access Token with repository scope
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Minimal Agent Skill Manifest (`caveman.yaml`)
|
|
352
|
+
|
|
353
|
+
```yaml
|
|
354
|
+
id: caveman
|
|
355
|
+
name: Caveman Output Compression Skill
|
|
356
|
+
version: 0.8.1
|
|
357
|
+
description: Standardized refactoring patterns and clean architecture workflows for coding agents.
|
|
358
|
+
documentation_url: https://aiaddons.dev/skills/refactoring
|
|
359
|
+
license: Apache-2.0
|
|
360
|
+
category: workflow
|
|
361
|
+
integration_type: skill
|
|
362
|
+
target_agents:
|
|
363
|
+
- claude-code
|
|
364
|
+
supported_scopes:
|
|
365
|
+
- workspace
|
|
366
|
+
source:
|
|
367
|
+
source_type: git
|
|
368
|
+
url: https://github.com/JuliusBrussee/caveman.git
|
|
369
|
+
ref: v0.8.1
|
|
370
|
+
commit_sha: 4a2d8f9e1c3b5a7d9e0f2a4b6c8d0e1f2a3b4c5d
|
|
371
|
+
dependencies: []
|
|
372
|
+
trust:
|
|
373
|
+
verification_status: community
|
|
374
|
+
publisher:
|
|
375
|
+
name: Community Developers
|
|
376
|
+
declared_verified: false
|
|
377
|
+
tags:
|
|
378
|
+
- refactoring
|
|
379
|
+
- skill
|
|
380
|
+
- clean-code
|
|
381
|
+
handler_spec:
|
|
382
|
+
skill:
|
|
383
|
+
skill_file: SKILL.md
|
|
384
|
+
supporting_files: []
|
|
385
|
+
```
|
|
386
|
+
|
|
387
|
+
---
|
|
388
|
+
|
|
389
|
+
|
|
390
|
+
## Hardening & Reliability
|
|
391
|
+
|
|
392
|
+
As part of the project's evolution, `aiaddons` underwent a dedicated manual QA pass that identified and resolved real-world edge cases not caught by automated testing. This quality investment resulted in significant improvements to transactional safety—particularly around MCP server installation (preventing daemon-process hangs during failed installations), secret resolution correctness fixes across different terminal environments, and robust cross-platform input handling. Manual QA and real-world hardening remain integral parts of the project's ongoing quality lifecycle.
|
|
393
|
+
|
|
394
|
+
## Project Status
|
|
395
|
+
|
|
396
|
+
`aiaddons` has achieved the complete **v1.0 Milestone**. All core package manager workflows—declarative installation, batch stack files, transactional removal with drift detection, automated updates with version swapping, workspace lockfile synchronization, 9-category system diagnostics, and an interactive Textual TUI—are fully operational and tested.
|
|
397
|
+
|
|
398
|
+
### Test Suite Status
|
|
399
|
+
|
|
400
|
+
```text
|
|
401
|
+
=========================== test session starts ============================
|
|
402
|
+
platform win32 -- Python 3.12.13, pytest-9.1.1, pluggy-1.5.0
|
|
403
|
+
rootdir: C:\Users\Anuj Kumar\Desktop\add_ons
|
|
404
|
+
configfile: pyproject.toml
|
|
405
|
+
testpaths: tests
|
|
406
|
+
collected 505 items
|
|
407
|
+
|
|
408
|
+
501 passed, 4 skipped in 46.36s
|
|
409
|
+
=========================== lint & typecheck ===============================
|
|
410
|
+
Ruff Linter: All checks passed!
|
|
411
|
+
Mypy Strict: Checked 93 source files
|
|
412
|
+
```
|
|
413
|
+
|
|
414
|
+
*(Note: 4 unit tests skipped conditionally on Windows due to symlink creation privileges without Developer Mode).*
|
|
415
|
+
|
|
416
|
+
*(Note: Manual QA is actively incorporated into the project's ongoing quality and release process to ensure real-world reliability beyond automated testing).*
|
|
417
|
+
|
|
418
|
+
### Completed (v1.0 Milestone)
|
|
419
|
+
|
|
420
|
+
* [x] **Declarative Installation & Batch Stacks**: Single and multi-package installs (`aiaddons install <ids...>`) and `--file stack.yaml` with WAL rollback protection.
|
|
421
|
+
* [x] **Safe Transactional Removal**: `aiaddons remove <addon-id>` with configuration drift detection and inverse verification.
|
|
422
|
+
* [x] **Add-on Updates & Version Swapping**: `aiaddons update [--all]` with SemVer resolution and atomic transaction rollback.
|
|
423
|
+
* [x] **Workspace Sync**: `aiaddons sync [--prune] [--update]` restoring and reconciling `aiaddons.lock`.
|
|
424
|
+
* [x] **Interactive Textual TUI**: Add-on browser, `HealthScreen` diagnostics, `SyncScreen` reconciliation, drift/update modals, and toast notifications.
|
|
425
|
+
* [x] **System Diagnostics**: `aiaddons doctor` covering 9 critical health categories across runtimes, state, lockfile, and WAL.
|
|
426
|
+
* [x] **Remote Registry Synchronization**: `aiaddons registry update/status` with HTTP caching and fallback.
|
|
427
|
+
|
|
428
|
+
### Future Roadmap (v2.0)
|
|
429
|
+
|
|
430
|
+
* [ ] **Additional Agent Adapters**: Official adapter implementations for Cursor, Windsurf, Gemini CLI, and Aider.
|
|
431
|
+
* [ ] **Manifest Publishing & Cryptographic Signatures**: `aiaddons publish` for validating, signing, and submitting manifests to signed remote registries.
|
|
432
|
+
* [ ] **Sandboxed MCP Execution**: Containerized / WebAssembly runtime environments for isolated MCP server execution.
|
|
433
|
+
|
|
434
|
+
---
|
|
435
|
+
|
|
436
|
+
## Contributing
|
|
437
|
+
|
|
438
|
+
Contributions are welcome! Please ensure that any changes adhere to our engineering rules and architectural standards (see `AGENTS.md`):
|
|
439
|
+
|
|
440
|
+
1. **Keep presentation decoupled**: Core domain models and engines (`core/`) must never import UI code (`cli/`, `tui/`).
|
|
441
|
+
2. **Never hardcode add-ons**: Integrations must be strictly registry-driven.
|
|
442
|
+
3. **Ensure full typing and test coverage**:
|
|
443
|
+
```bash
|
|
444
|
+
# Run tests
|
|
445
|
+
pytest
|
|
446
|
+
|
|
447
|
+
# Run type checks
|
|
448
|
+
mypy src
|
|
449
|
+
|
|
450
|
+
# Run linter
|
|
451
|
+
ruff check src tests
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
---
|
|
455
|
+
|
|
456
|
+
## License
|
|
457
|
+
|
|
458
|
+
This project is licensed under the **MIT License**. See [`pyproject.toml`](pyproject.toml) for details.
|