synara-ai 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.
- synara_ai-0.1.0/PKG-INFO +91 -0
- synara_ai-0.1.0/README.md +75 -0
- synara_ai-0.1.0/pyproject.toml +37 -0
- synara_ai-0.1.0/setup.cfg +4 -0
- synara_ai-0.1.0/src/synara/__init__.py +0 -0
- synara_ai-0.1.0/src/synara/agents/__init__.py +0 -0
- synara_ai-0.1.0/src/synara/agents/advanced.py +45 -0
- synara_ai-0.1.0/src/synara/agents/backend.py +33 -0
- synara_ai-0.1.0/src/synara/agents/frontend.py +32 -0
- synara_ai-0.1.0/src/synara/agents/fullstack.py +35 -0
- synara_ai-0.1.0/src/synara/agents/legacy.py +29 -0
- synara_ai-0.1.0/src/synara/agents/mobile.py +34 -0
- synara_ai-0.1.0/src/synara/agents/qa.py +31 -0
- synara_ai-0.1.0/src/synara/agents/test_agents.py +635 -0
- synara_ai-0.1.0/src/synara/cli/__init__.py +352 -0
- synara_ai-0.1.0/src/synara/cli/__main__.py +4 -0
- synara_ai-0.1.0/src/synara/cli/commands/__init__.py +1 -0
- synara_ai-0.1.0/src/synara/cli/commands/add_agent.py +72 -0
- synara_ai-0.1.0/src/synara/cli/commands/add_skill.py +55 -0
- synara_ai-0.1.0/src/synara/cli/commands/doctor.py +128 -0
- synara_ai-0.1.0/src/synara/cli/commands/init.py +206 -0
- synara_ai-0.1.0/src/synara/cli/commands/list.py +65 -0
- synara_ai-0.1.0/src/synara/cli/commands/sync.py +63 -0
- synara_ai-0.1.0/src/synara/cli/commands/update.py +68 -0
- synara_ai-0.1.0/src/synara/cli/main.py +40 -0
- synara_ai-0.1.0/src/synara/core/__init__.py +0 -0
- synara_ai-0.1.0/src/synara/core/adapters.py +912 -0
- synara_ai-0.1.0/src/synara/core/base_agent.py +124 -0
- synara_ai-0.1.0/src/synara/core/checksum.py +22 -0
- synara_ai-0.1.0/src/synara/core/config.py +25 -0
- synara_ai-0.1.0/src/synara/core/config_manager.py +43 -0
- synara_ai-0.1.0/src/synara/core/feedback.py +1 -0
- synara_ai-0.1.0/src/synara/core/feedback_loop.py +72 -0
- synara_ai-0.1.0/src/synara/core/file_writer.py +124 -0
- synara_ai-0.1.0/src/synara/core/markdown_loader.py +144 -0
- synara_ai-0.1.0/src/synara/core/memory.py +1 -0
- synara_ai-0.1.0/src/synara/core/memory_store.py +121 -0
- synara_ai-0.1.0/src/synara/core/models.py +343 -0
- synara_ai-0.1.0/src/synara/core/orchestrator.py +58 -0
- synara_ai-0.1.0/src/synara/core/project_detector.py +57 -0
- synara_ai-0.1.0/src/synara/core/template_manager.py +23 -0
- synara_ai-0.1.0/src/synara/core/token_killer.py +129 -0
- synara_ai-0.1.0/src/synara/templates/__init__.py +1 -0
- synara_ai-0.1.0/src/synara/templates/__pycache__/__init__.cpython-314.pyc +0 -0
- synara_ai-0.1.0/src/synara/templates/agents/api_design.md +11 -0
- synara_ai-0.1.0/src/synara/templates/agents/database_schema.md +11 -0
- synara_ai-0.1.0/src/synara/templates/agents/navigation.md +9 -0
- synara_ai-0.1.0/src/synara/templates/agents/push_notification.md +6 -0
- synara_ai-0.1.0/src/synara/templates/agents/react_native_expo_coding.md +11 -0
- synara_ai-0.1.0/src/synara/templates/agents/react_nextjs_coding.md +12 -0
- synara_ai-0.1.0/src/synara/templates/agents/requirement_review.md +6 -0
- synara_ai-0.1.0/src/synara/templates/agents/synara_governance.md +6 -0
- synara_ai-0.1.0/src/synara/templates/agents/system_architect.md +6 -0
- synara_ai-0.1.0/src/synara/templates/agents/ui_ux_analyzer.md +11 -0
- synara_ai-0.1.0/src/synara/templates/default/agents/agent-contract.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/agents/agents-architecture.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/ci-runner-adapter.md +13 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/claude-code-adapter.md +14 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/codex-adapter.md +14 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/cursor-adapter.md +13 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/local-cli-adapter.md +13 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/openclaw-adapter.md +13 -0
- synara_ai-0.1.0/src/synara/templates/default/execution-engine/openhands-adapter.md +13 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/ci-feedback.md +9 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/datadog-feedback.md +9 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/github-feedback.md +10 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/maestro-feedback.md +9 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/playwright-feedback.md +10 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/release-feedback.md +9 -0
- synara_ai-0.1.0/src/synara/templates/default/feedback-loop/sentry-feedback.md +10 -0
- synara_ai-0.1.0/src/synara/templates/default/governance/audit-logging-schema.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/governance/compliance-rules.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/knowledge/business-domain-wiki.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/adr/adr-rules.md +5 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/dependency-history/dependency-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/incidents/incident-rules.md +8 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/lessons-learned/lessons-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/memory-read-rules.md +10 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/memory-write-rules.md +9 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/quality-history/quality-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/rejected-decisions/rejected-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/release-history/release-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/risk-register/risk-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/successful-patterns/pattern-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/test-history/test-rules.md +4 -0
- synara_ai-0.1.0/src/synara/templates/default/memory-store/vector-db/spec.md +10 -0
- synara_ai-0.1.0/src/synara/templates/default/metrics/metrics-schema.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/playbooks/common-recipes.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/playbooks/playbook-schema.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/quality-gates/quality-gates-spec.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/router/router-spec.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/rules/rules-manifest.json +9 -0
- synara_ai-0.1.0/src/synara/templates/default/skills/custom-tools.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/skills/enterprise-mobile-standards.md +85 -0
- synara_ai-0.1.0/src/synara/templates/default/skills/global-anti-hardcoding.md +38 -0
- synara_ai-0.1.0/src/synara/templates/default/skills/skills-registry.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/templates/adr-template.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/templates/pr-template.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/workflows/e2e-dev-flow.md +2 -0
- synara_ai-0.1.0/src/synara/templates/default/workflows/workflows-schema.md +2 -0
- synara_ai-0.1.0/src/synara/templates/manifest.json +152 -0
- synara_ai-0.1.0/src/synara/templates/playbooks/feature-implementation.md +7 -0
- synara_ai-0.1.0/src/synara/templates/quality_gates/lint-check.md +2 -0
- synara_ai-0.1.0/src/synara/templates/skills/android-cli.md +2 -0
- synara_ai-0.1.0/src/synara/templates/skills/eslint.md +2 -0
- synara_ai-0.1.0/src/synara/templates/skills/jest-test.md +2 -0
- synara_ai-0.1.0/src/synara/templates/skills/mobile-adv-libs.md +126 -0
- synara_ai-0.1.0/src/synara/workflows/__init__.py +0 -0
- synara_ai-0.1.0/src/synara/workflows/demo_advanced.py +58 -0
- synara_ai-0.1.0/src/synara/workflows/e2e_workflow.py +30 -0
- synara_ai-0.1.0/src/synara_ai.egg-info/PKG-INFO +91 -0
- synara_ai-0.1.0/src/synara_ai.egg-info/SOURCES.txt +125 -0
- synara_ai-0.1.0/src/synara_ai.egg-info/dependency_links.txt +1 -0
- synara_ai-0.1.0/src/synara_ai.egg-info/entry_points.txt +2 -0
- synara_ai-0.1.0/src/synara_ai.egg-info/requires.txt +3 -0
- synara_ai-0.1.0/src/synara_ai.egg-info/top_level.txt +1 -0
- synara_ai-0.1.0/tests/test_adapters_extended.py +193 -0
- synara_ai-0.1.0/tests/test_agy_cli_adapter.py +138 -0
- synara_ai-0.1.0/tests/test_all_agents.py +120 -0
- synara_ai-0.1.0/tests/test_architecture_guardrails.py +73 -0
- synara_ai-0.1.0/tests/test_claude_adapter.py +85 -0
- synara_ai-0.1.0/tests/test_cleanup.py +201 -0
- synara_ai-0.1.0/tests/test_cli.py +180 -0
- synara_ai-0.1.0/tests/test_codex_cli_adapter.py +86 -0
- synara_ai-0.1.0/tests/test_fallback_adapter.py +232 -0
- synara_ai-0.1.0/tests/test_synara_cli.py +166 -0
- synara_ai-0.1.0/tests/test_token_killer.py +77 -0
synara_ai-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: synara-ai
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Synara reusable CLI tool
|
|
5
|
+
Author-email: DamianosDev <developer@example.com>
|
|
6
|
+
Project-URL: Homepage, https://github.com/DamianosDev/harness_engineers
|
|
7
|
+
Classifier: Programming Language :: Python :: 3
|
|
8
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Requires-Python: >=3.10
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
Requires-Dist: typer>=0.12.0
|
|
14
|
+
Requires-Dist: rich>=13.0.0
|
|
15
|
+
Requires-Dist: pydantic>=2.0.0
|
|
16
|
+
|
|
17
|
+
# Synara Framework: AI Agent Prompts & Architecture
|
|
18
|
+
|
|
19
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
20
|
+
[](https://www.python.org/)
|
|
21
|
+
[](#)
|
|
22
|
+
|
|
23
|
+
This project defines and implements the **Synara Framework**, a robust architecture for orchestrating autonomous Multi-Agent systems using a strict **Prompt-as-Code** philosophy. This framework controls behavior, optimizes context windows, and raises the reliability of AI Agents throughout the software development lifecycle by decoupling agent intelligence from rigid execution logic.
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 📖 Documentation Hub
|
|
28
|
+
|
|
29
|
+
The Synara Framework documentation has been divided into modular guides for easier navigation:
|
|
30
|
+
|
|
31
|
+
* 🧠 **[Synara Framework Architecture & Agent Limits](docs/framework.md)**
|
|
32
|
+
* 🏛️ **[13-Layer System Architecture](docs/architecture-13-layers.md)**: Detailed breakdown of the runtime execution layers and directories.
|
|
33
|
+
* 📜 **[Prompt-as-Code Philosophy](.synara/governance/compliance-rules.md)**: Explore the rules governing our Prompt-as-Code ecosystem.
|
|
34
|
+
* ⚙️ **[Configuration Guide](docs/configuration.md)**: Explains the `synara.config.json` schema, including AI memory constraints and Quota Fallback logic.
|
|
35
|
+
* 💻 **[CLI Reference](docs/cli-reference.md)**: Documentation for the `synara-ai` CLI, safe file writer, and command options.
|
|
36
|
+
* 📦 **[Presets, Agents, and Skills](docs/presets-and-skills.md)**: Catalog of built-in templates, advanced Android integrations, and mobile libraries.
|
|
37
|
+
* 🔄 **[Git Workflow](docs/git-workflow.md)**: Standardized branching and commit processes for Synara.
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 🚀 Installation
|
|
42
|
+
|
|
43
|
+
Synara provides a standalone CLI (`synara-ai`) that can be installed globally via `pipx` or `brew`.
|
|
44
|
+
|
|
45
|
+
### Option 1: Install via `pipx` (Recommended)
|
|
46
|
+
This is the recommended way to install Python CLIs as it creates an isolated environment.
|
|
47
|
+
```bash
|
|
48
|
+
pipx install git+https://github.com/DamianosDev/harness_engineers.git@develop
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Option 2: Install via Homebrew
|
|
52
|
+
You can install the CLI directly from the source code using the provided Homebrew formula:
|
|
53
|
+
```bash
|
|
54
|
+
brew install ./Formula/synara-ai.rb
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
---
|
|
58
|
+
|
|
59
|
+
## ⚡ Core Principles
|
|
60
|
+
|
|
61
|
+
The Synara system operates on four main technical pillars:
|
|
62
|
+
|
|
63
|
+
1. **Prompt-as-Code:** Agent intelligence, behavior, and roles must be defined explicitly in Markdown files with YAML frontmatter (`.synara/agents/*.md`), completely decoupled from Python execution code.
|
|
64
|
+
2. **Context Engineering:** Deliver exactly what the agent needs through a **Context Pack** (intentional context compression), rather than stuffing the entire codebase. This prevents the AI from hallucinating.
|
|
65
|
+
3. **No Vibes Allowed:** Force the AI to perform structured, step-by-step planning and reasoning before writing any code.
|
|
66
|
+
4. **Anti-Slop:** Constraint the output format via an **Output Contract**, automatically rejecting wordy or redundant responses and preventing unrelated logic changes.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 📜 Prompt-as-Code Architecture
|
|
71
|
+
|
|
72
|
+
Synara strictly enforces that **all Agent definitions must live in Markdown files**, not hardcoded in Python. This guarantees modularity, easy maintenance, and protects the system from architectural regression.
|
|
73
|
+
|
|
74
|
+
### Dynamic Agent Loading
|
|
75
|
+
When an agent is requested, the system uses the `markdown_loader.py` module to dynamically parse the Markdown files located in `.synara/agents/*.md`.
|
|
76
|
+
|
|
77
|
+
Each file must contain a **YAML Frontmatter** block:
|
|
78
|
+
```yaml
|
|
79
|
+
---
|
|
80
|
+
name: code-reviewer
|
|
81
|
+
description: Expert code reviewer specializing in SOLID principles and clean architecture.
|
|
82
|
+
model: models/gemini-3.1-pro-high
|
|
83
|
+
tools:
|
|
84
|
+
- view_file
|
|
85
|
+
- run_command
|
|
86
|
+
---
|
|
87
|
+
```
|
|
88
|
+
The content below the frontmatter serves as the Agent's specific System Prompt.
|
|
89
|
+
|
|
90
|
+
### AST Guardrails
|
|
91
|
+
To prevent future developers or AI systems from regressing into a hardcoded architecture, the project utilizes strict AST (Abstract Syntax Tree) unit tests (`tests/test_architecture_guardrails.py`). If any large string constant (prompt) is detected directly inside the Python agent controllers, the CI pipeline will instantly fail.
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Synara Framework: AI Agent Prompts & Architecture
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
4
|
+
[](https://www.python.org/)
|
|
5
|
+
[](#)
|
|
6
|
+
|
|
7
|
+
This project defines and implements the **Synara Framework**, a robust architecture for orchestrating autonomous Multi-Agent systems using a strict **Prompt-as-Code** philosophy. This framework controls behavior, optimizes context windows, and raises the reliability of AI Agents throughout the software development lifecycle by decoupling agent intelligence from rigid execution logic.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 📖 Documentation Hub
|
|
12
|
+
|
|
13
|
+
The Synara Framework documentation has been divided into modular guides for easier navigation:
|
|
14
|
+
|
|
15
|
+
* 🧠 **[Synara Framework Architecture & Agent Limits](docs/framework.md)**
|
|
16
|
+
* 🏛️ **[13-Layer System Architecture](docs/architecture-13-layers.md)**: Detailed breakdown of the runtime execution layers and directories.
|
|
17
|
+
* 📜 **[Prompt-as-Code Philosophy](.synara/governance/compliance-rules.md)**: Explore the rules governing our Prompt-as-Code ecosystem.
|
|
18
|
+
* ⚙️ **[Configuration Guide](docs/configuration.md)**: Explains the `synara.config.json` schema, including AI memory constraints and Quota Fallback logic.
|
|
19
|
+
* 💻 **[CLI Reference](docs/cli-reference.md)**: Documentation for the `synara-ai` CLI, safe file writer, and command options.
|
|
20
|
+
* 📦 **[Presets, Agents, and Skills](docs/presets-and-skills.md)**: Catalog of built-in templates, advanced Android integrations, and mobile libraries.
|
|
21
|
+
* 🔄 **[Git Workflow](docs/git-workflow.md)**: Standardized branching and commit processes for Synara.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 🚀 Installation
|
|
26
|
+
|
|
27
|
+
Synara provides a standalone CLI (`synara-ai`) that can be installed globally via `pipx` or `brew`.
|
|
28
|
+
|
|
29
|
+
### Option 1: Install via `pipx` (Recommended)
|
|
30
|
+
This is the recommended way to install Python CLIs as it creates an isolated environment.
|
|
31
|
+
```bash
|
|
32
|
+
pipx install git+https://github.com/DamianosDev/harness_engineers.git@develop
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Option 2: Install via Homebrew
|
|
36
|
+
You can install the CLI directly from the source code using the provided Homebrew formula:
|
|
37
|
+
```bash
|
|
38
|
+
brew install ./Formula/synara-ai.rb
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## ⚡ Core Principles
|
|
44
|
+
|
|
45
|
+
The Synara system operates on four main technical pillars:
|
|
46
|
+
|
|
47
|
+
1. **Prompt-as-Code:** Agent intelligence, behavior, and roles must be defined explicitly in Markdown files with YAML frontmatter (`.synara/agents/*.md`), completely decoupled from Python execution code.
|
|
48
|
+
2. **Context Engineering:** Deliver exactly what the agent needs through a **Context Pack** (intentional context compression), rather than stuffing the entire codebase. This prevents the AI from hallucinating.
|
|
49
|
+
3. **No Vibes Allowed:** Force the AI to perform structured, step-by-step planning and reasoning before writing any code.
|
|
50
|
+
4. **Anti-Slop:** Constraint the output format via an **Output Contract**, automatically rejecting wordy or redundant responses and preventing unrelated logic changes.
|
|
51
|
+
|
|
52
|
+
---
|
|
53
|
+
|
|
54
|
+
## 📜 Prompt-as-Code Architecture
|
|
55
|
+
|
|
56
|
+
Synara strictly enforces that **all Agent definitions must live in Markdown files**, not hardcoded in Python. This guarantees modularity, easy maintenance, and protects the system from architectural regression.
|
|
57
|
+
|
|
58
|
+
### Dynamic Agent Loading
|
|
59
|
+
When an agent is requested, the system uses the `markdown_loader.py` module to dynamically parse the Markdown files located in `.synara/agents/*.md`.
|
|
60
|
+
|
|
61
|
+
Each file must contain a **YAML Frontmatter** block:
|
|
62
|
+
```yaml
|
|
63
|
+
---
|
|
64
|
+
name: code-reviewer
|
|
65
|
+
description: Expert code reviewer specializing in SOLID principles and clean architecture.
|
|
66
|
+
model: models/gemini-3.1-pro-high
|
|
67
|
+
tools:
|
|
68
|
+
- view_file
|
|
69
|
+
- run_command
|
|
70
|
+
---
|
|
71
|
+
```
|
|
72
|
+
The content below the frontmatter serves as the Agent's specific System Prompt.
|
|
73
|
+
|
|
74
|
+
### AST Guardrails
|
|
75
|
+
To prevent future developers or AI systems from regressing into a hardcoded architecture, the project utilizes strict AST (Abstract Syntax Tree) unit tests (`tests/test_architecture_guardrails.py`). If any large string constant (prompt) is detected directly inside the Python agent controllers, the CI pipeline will instantly fail.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["setuptools>=61.0.0", "wheel"]
|
|
3
|
+
build-backend = "setuptools.build_meta"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "synara-ai"
|
|
7
|
+
version = "0.1.0"
|
|
8
|
+
description = "Synara reusable CLI tool"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.10"
|
|
11
|
+
authors = [
|
|
12
|
+
{ name = "DamianosDev", email = "developer@example.com" }
|
|
13
|
+
]
|
|
14
|
+
classifiers = [
|
|
15
|
+
"Programming Language :: Python :: 3",
|
|
16
|
+
"License :: OSI Approved :: Apache Software License",
|
|
17
|
+
"Operating System :: OS Independent",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
]
|
|
20
|
+
dependencies = [
|
|
21
|
+
"typer>=0.12.0",
|
|
22
|
+
"rich>=13.0.0",
|
|
23
|
+
"pydantic>=2.0.0",
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
[project.urls]
|
|
27
|
+
"Homepage" = "https://github.com/DamianosDev/harness_engineers"
|
|
28
|
+
|
|
29
|
+
[project.scripts]
|
|
30
|
+
synara-ai = "synara.cli.main:app"
|
|
31
|
+
|
|
32
|
+
[tool.setuptools.packages.find]
|
|
33
|
+
where = ["src"]
|
|
34
|
+
include = ["synara*"]
|
|
35
|
+
|
|
36
|
+
[tool.setuptools.package-data]
|
|
37
|
+
"synara.templates" = ["**/*"]
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
3
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
4
|
+
|
|
5
|
+
_AGENTS = {
|
|
6
|
+
"create_context_compression_agent": ("Context Compression Agent", "models/gemini-3.5-flash-low"),
|
|
7
|
+
"create_synara_governance_agent": ("Synara Governance Agent", "models/claude-sonnet-4.6-thinking"),
|
|
8
|
+
"create_knowledge_retrieval_agent": ("Knowledge Retrieval Agent", "models/gemini-3.5-flash-medium"),
|
|
9
|
+
"create_memory_agent": ("Memory Agent", "models/gemini-3.5-flash-low"),
|
|
10
|
+
"create_adr_agent": ("Architecture Decision Record (ADR) Agent", "models/claude-sonnet-4.6-thinking"),
|
|
11
|
+
"create_dependency_review_agent": ("Dependency Review Agent", "models/gemini-3.5-flash-medium"),
|
|
12
|
+
"create_git_intelligence_agent": ("Git Intelligence Agent", "models/gemini-3.5-flash-medium"),
|
|
13
|
+
"create_root_cause_analysis_agent": ("Root Cause Analysis (RCA) Agent", "models/claude-opus-4.6-thinking"),
|
|
14
|
+
"create_release_manager_agent": ("Release Manager Agent", "models/claude-opus-4.6-thinking"),
|
|
15
|
+
"create_device_coverage_agent": ("Device Coverage Agent", "models/gemini-3.5-flash-low"),
|
|
16
|
+
"create_prompt_security_agent": ("Prompt Security Agent", "models/claude-sonnet-4.6-thinking"),
|
|
17
|
+
"create_cost_optimization_agent": ("Cost Optimization Agent", "models/gemini-3.5-flash-low"),
|
|
18
|
+
"create_observability_agent": ("Observability Agent", "models/gemini-3.5-flash-medium"),
|
|
19
|
+
"create_tool_execution_agent": ("Tool Execution Agent", "models/gemini-3.1-pro-high"),
|
|
20
|
+
"create_tool_permission_agent": ("Tool Permission Agent", "models/gemini-3.5-flash-medium"),
|
|
21
|
+
"create_agent_communication_protocol_agent": ("Agent Communication Protocol Agent", "models/gemini-3.5-flash-medium"),
|
|
22
|
+
"create_confidence_evaluation_agent": ("Confidence Evaluation Agent", "models/gpt-5.4"),
|
|
23
|
+
"create_failure_recovery_agent": ("Failure Recovery Agent", "models/gemini-3.1-pro-high"),
|
|
24
|
+
"create_coding_standards_agent": ("Coding Standards Agent", "models/gemini-3.5-flash-high"),
|
|
25
|
+
"create_architecture_compliance_agent": ("Architecture Compliance Agent", "models/claude-sonnet-4.6-thinking"),
|
|
26
|
+
"create_knowledge_gap_agent": ("Knowledge Gap Agent", "models/gemini-3.1-pro-high"),
|
|
27
|
+
"create_production_incident_agent": ("Production Incident Agent", "models/claude-opus-4.6-thinking"),
|
|
28
|
+
"create_learning_feedback_agent": ("Learning & Feedback Agent", "models/gemini-3.5-flash-medium"),
|
|
29
|
+
"create_enterprise_governance_agent": ("Enterprise Governance Agent", "models/claude-opus-4.6-thinking"),
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
_data_cache = {}
|
|
33
|
+
|
|
34
|
+
def __getattr__(name):
|
|
35
|
+
if name in _AGENTS:
|
|
36
|
+
agent_name, model = _AGENTS[name]
|
|
37
|
+
def factory():
|
|
38
|
+
if name not in _data_cache:
|
|
39
|
+
_data_cache[name] = load_agent_from_markdown(f".synara/agents/{name}.md", agent_name)
|
|
40
|
+
data = _data_cache[name]
|
|
41
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=model)
|
|
42
|
+
factory.__name__ = name
|
|
43
|
+
globals()[name] = factory
|
|
44
|
+
return factory
|
|
45
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
3
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
4
|
+
|
|
5
|
+
_AGENTS = {
|
|
6
|
+
"create_api_design_agent": ("API Design Agent", "models/gemini-3.1-pro-high"),
|
|
7
|
+
"create_database_schema_agent": ("Database Schema Agent", "models/gemini-3.1-pro-high"),
|
|
8
|
+
"create_nestjs_express_coding_agent": ("NestJS / Express Coding Agent", "models/gemini-3.1-pro-high"),
|
|
9
|
+
"create_authentication_authorization_agent": ("Authentication / Authorization Agent", "models/claude-sonnet-4.6-thinking"),
|
|
10
|
+
"create_business_logic_agent": ("Business Logic Agent", "models/gemini-3.1-pro-high"),
|
|
11
|
+
"create_validation_dto_agent": ("Validation / DTO Agent", "models/gemini-3.1-pro-low"),
|
|
12
|
+
"create_swagger_openapi_agent": ("Swagger / OpenAPI Agent", "models/gemini-3.5-flash-medium"),
|
|
13
|
+
"create_unit_test_agent": ("Unit Test Agent", "models/gemini-3.1-pro-low"),
|
|
14
|
+
"create_integration_test_agent": ("Integration Test Agent", "models/gemini-3.1-pro-high"),
|
|
15
|
+
"create_security_scan_agent": ("Security Scan Agent", "models/claude-sonnet-4.6-thinking"),
|
|
16
|
+
"create_performance_load_test_agent": ("Performance / Load Test Agent", "models/gpt-5.4"),
|
|
17
|
+
"create_logging_monitoring_agent": ("Logging / Monitoring Agent", "models/gemini-3.5-flash-low"),
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
_data_cache = {}
|
|
21
|
+
|
|
22
|
+
def __getattr__(name):
|
|
23
|
+
if name in _AGENTS:
|
|
24
|
+
agent_name, model = _AGENTS[name]
|
|
25
|
+
def factory():
|
|
26
|
+
if name not in _data_cache:
|
|
27
|
+
_data_cache[name] = load_agent_from_markdown(f".synara/agents/{name}.md", agent_name)
|
|
28
|
+
data = _data_cache[name]
|
|
29
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=model)
|
|
30
|
+
factory.__name__ = name
|
|
31
|
+
globals()[name] = factory
|
|
32
|
+
return factory
|
|
33
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
3
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
4
|
+
|
|
5
|
+
_AGENTS = {
|
|
6
|
+
"create_ui_ux_analyzer_agent": ("UI/UX Analyzer Agent", "models/gemini-3.5-flash-medium"),
|
|
7
|
+
"create_react_nextjs_coding_agent": ("React / Next.js Coding Agent", "models/gemini-3.1-pro-high"),
|
|
8
|
+
"create_component_generator_agent": ("Component Generator Agent", "models/gemini-3.1-pro-high"),
|
|
9
|
+
"create_state_management_agent": ("State Management Agent", "models/gemini-3.1-pro-high"),
|
|
10
|
+
"create_form_validation_agent": ("Form Validation Agent", "models/gemini-3.1-pro-low"),
|
|
11
|
+
"create_api_integration_agent": ("API Integration Agent", "models/gemini-3.1-pro-high"),
|
|
12
|
+
"create_accessibility_review_agent": ("Accessibility Review Agent", "models/gemini-3.5-flash-medium"),
|
|
13
|
+
"create_responsive_layout_agent": ("Responsive Layout Agent", "models/gemini-3.1-pro-low"),
|
|
14
|
+
"create_frontend_unit_test_agent": ("Frontend Unit Test Agent", "models/gemini-3.1-pro-low"),
|
|
15
|
+
"create_playwright_e2e_agent": ("Playwright E2E Agent", "models/gemini-3.1-pro-low"),
|
|
16
|
+
"create_performance_review_agent": ("Performance Review Agent", "models/gemini-3.5-flash-high"),
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
_data_cache = {}
|
|
20
|
+
|
|
21
|
+
def __getattr__(name):
|
|
22
|
+
if name in _AGENTS:
|
|
23
|
+
agent_name, model = _AGENTS[name]
|
|
24
|
+
def factory():
|
|
25
|
+
if name not in _data_cache:
|
|
26
|
+
_data_cache[name] = load_agent_from_markdown(f".synara/agents/{name}.md", agent_name)
|
|
27
|
+
data = _data_cache[name]
|
|
28
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=model)
|
|
29
|
+
factory.__name__ = name
|
|
30
|
+
globals()[name] = factory
|
|
31
|
+
return factory
|
|
32
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
3
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
4
|
+
|
|
5
|
+
_AGENTS = {
|
|
6
|
+
"create_requirement_analyzer_agent": ("Requirement Analyzer Agent", "models/gemini-2.5-pro"),
|
|
7
|
+
"create_system_architect_agent": ("System Architect Agent", "models/gemini-2.5-pro"),
|
|
8
|
+
"create_fullstack_coding_agent": ("Full-stack Coding Agent", "models/gemini-2.5-pro"),
|
|
9
|
+
"create_api_contract_agent": ("API Contract Agent", "models/gemini-3.1-pro-high"),
|
|
10
|
+
"create_database_design_agent": ("Database Design Agent", "models/gemini-3.1-pro-high"),
|
|
11
|
+
"create_integration_agent": ("Integration Agent", "models/gemini-3.1-pro-high"),
|
|
12
|
+
"create_test_case_generator_agent": ("Test Case Generator Agent", "models/gemini-3.1-pro-low"),
|
|
13
|
+
"create_code_review_agent": ("Code Review Agent", "models/claude-sonnet-4.6-thinking"),
|
|
14
|
+
"create_security_review_agent": ("Security Review Agent", "models/claude-sonnet-4.6-thinking"),
|
|
15
|
+
"create_devops_cicd_agent": ("DevOps / CI-CD Agent", "models/gemini-3.5-flash-medium"),
|
|
16
|
+
"create_documentation_agent": ("Documentation Agent", "models/gemini-3.5-flash-medium"),
|
|
17
|
+
"create_pr_creator_agent": ("PR Creator Agent", "models/gemini-3.5-flash-low"),
|
|
18
|
+
"create_migration_agent": ("Migration Agent", "models/gemini-3.1-pro-high"),
|
|
19
|
+
"create_data_analytics_agent": ("Data / Analytics Agent", "models/gpt-5.4"),
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
_data_cache = {}
|
|
23
|
+
|
|
24
|
+
def __getattr__(name):
|
|
25
|
+
if name in _AGENTS:
|
|
26
|
+
agent_name, model = _AGENTS[name]
|
|
27
|
+
def factory():
|
|
28
|
+
if name not in _data_cache:
|
|
29
|
+
_data_cache[name] = load_agent_from_markdown(f".synara/agents/{name}.md", agent_name)
|
|
30
|
+
data = _data_cache[name]
|
|
31
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=model)
|
|
32
|
+
factory.__name__ = name
|
|
33
|
+
globals()[name] = factory
|
|
34
|
+
return factory
|
|
35
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
import os
|
|
3
|
+
import glob
|
|
4
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
5
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
6
|
+
|
|
7
|
+
_AGENTS = {}
|
|
8
|
+
|
|
9
|
+
legacy_files = glob.glob('.synara/agents/*.md')
|
|
10
|
+
for filepath in legacy_files:
|
|
11
|
+
basename = os.path.basename(filepath)
|
|
12
|
+
slug = basename.replace('.md', '')
|
|
13
|
+
func_name = f"create_{slug.replace('-', '_')}_agent"
|
|
14
|
+
_AGENTS[func_name] = (filepath, slug)
|
|
15
|
+
|
|
16
|
+
_data_cache = {}
|
|
17
|
+
|
|
18
|
+
def __getattr__(name):
|
|
19
|
+
if name in _AGENTS:
|
|
20
|
+
filepath, slug = _AGENTS[name]
|
|
21
|
+
def factory():
|
|
22
|
+
if name not in _data_cache:
|
|
23
|
+
_data_cache[name] = load_agent_from_markdown(filepath)
|
|
24
|
+
data = _data_cache[name]
|
|
25
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=data['model'])
|
|
26
|
+
factory.__name__ = name
|
|
27
|
+
globals()[name] = factory
|
|
28
|
+
return factory
|
|
29
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
3
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
4
|
+
|
|
5
|
+
_AGENTS = {
|
|
6
|
+
"create_react_native_expo_coding_agent": ("React Native / Expo Coding Agent", "models/gemini-3.1-pro-high"),
|
|
7
|
+
"create_native_module_agent": ("Native Module Agent", "models/gemini-3.1-pro-high"),
|
|
8
|
+
"create_navigation_agent": ("Navigation Agent", "models/gemini-3.1-pro-low"),
|
|
9
|
+
"create_offline_storage_agent": ("Offline Storage Agent", "models/gemini-3.1-pro-high"),
|
|
10
|
+
"create_push_notification_agent": ("Push Notification Agent", "models/gemini-3.1-pro-low"),
|
|
11
|
+
"create_permission_handling_agent": ("Permission Handling Agent", "models/gemini-3.1-pro-low"),
|
|
12
|
+
"create_camera_location_nfc_agent": ("Camera / Location / NFC Agent", "models/gemini-3.1-pro-low"),
|
|
13
|
+
"create_mobile_ui_component_agent": ("Mobile UI Component Agent", "models/gemini-3.1-pro-low"),
|
|
14
|
+
"create_detox_maestro_test_agent": ("Detox / Maestro Test Agent", "models/gemini-3.1-pro-low"),
|
|
15
|
+
"create_performance_optimization_agent": ("Performance Optimization Agent", "models/gemini-3.5-flash-high"),
|
|
16
|
+
"create_build_release_agent": ("Build / Release Agent", "models/gemini-3.1-pro-low"),
|
|
17
|
+
"create_app_store_play_store_checklist_agent": ("App Store / Play Store Checklist Agent", "models/gpt-5.4"),
|
|
18
|
+
"create_mobile_automation_engineer_agent": ("Mobile Automation Engineer Agent", "models/gemini-3.1-pro-high"),
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
_data_cache = {}
|
|
22
|
+
|
|
23
|
+
def __getattr__(name):
|
|
24
|
+
if name in _AGENTS:
|
|
25
|
+
agent_name, model = _AGENTS[name]
|
|
26
|
+
def factory():
|
|
27
|
+
if name not in _data_cache:
|
|
28
|
+
_data_cache[name] = load_agent_from_markdown(f".synara/agents/{name}.md", agent_name)
|
|
29
|
+
data = _data_cache[name]
|
|
30
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=model)
|
|
31
|
+
factory.__name__ = name
|
|
32
|
+
globals()[name] = factory
|
|
33
|
+
return factory
|
|
34
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import sys
|
|
2
|
+
from synara.core.base_agent import SynaraAgentBuilder
|
|
3
|
+
from synara.core.markdown_loader import load_agent_from_markdown
|
|
4
|
+
|
|
5
|
+
_AGENTS = {
|
|
6
|
+
"create_requirement_review_agent": ("Requirement Review Agent", "models/gemini-3.1-pro-high"),
|
|
7
|
+
"create_test_scenario_agent": ("Test Scenario Agent", "models/gemini-3.1-pro-low"),
|
|
8
|
+
"create_test_case_generator_agent": ("QA Test Case Generator Agent", "models/gemini-3.1-pro-low"),
|
|
9
|
+
"create_api_test_agent": ("API Test Agent", "models/gemini-3.1-pro-low"),
|
|
10
|
+
"create_web_e2e_test_agent": ("Web E2E Test Agent", "models/gemini-3.1-pro-low"),
|
|
11
|
+
"create_mobile_e2e_test_agent": ("Mobile E2E Test Agent", "models/gemini-3.1-pro-low"),
|
|
12
|
+
"create_regression_test_agent": ("Regression Test Agent", "models/gemini-3.1-pro-low"),
|
|
13
|
+
"create_defect_analysis_agent": ("Defect Analysis Agent", "models/claude-sonnet-4.6-thinking"),
|
|
14
|
+
"create_test_report_agent": ("Test Report Agent", "models/gemini-3.5-flash-low"),
|
|
15
|
+
"create_risk_analysis_agent": ("Risk Analysis Agent", "models/claude-opus-4.6-thinking"),
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
_data_cache = {}
|
|
19
|
+
|
|
20
|
+
def __getattr__(name):
|
|
21
|
+
if name in _AGENTS:
|
|
22
|
+
agent_name, model = _AGENTS[name]
|
|
23
|
+
def factory():
|
|
24
|
+
if name not in _data_cache:
|
|
25
|
+
_data_cache[name] = load_agent_from_markdown(f".synara/agents/{name}.md", agent_name)
|
|
26
|
+
data = _data_cache[name]
|
|
27
|
+
return SynaraAgentBuilder.build(data['identity'], data['thinking_process'], data['constraints'], model=model)
|
|
28
|
+
factory.__name__ = name
|
|
29
|
+
globals()[name] = factory
|
|
30
|
+
return factory
|
|
31
|
+
raise AttributeError(f"module {__name__} has no attribute {name}")
|