kastertrooy/MAX
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Β | Β | |||
Β | Β | |||
Repository files navigation
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Π£Π ΠΠΠΠΠ¬ 1: ΠΠΠ’ΠΠ Π€ΠΠΠ‘Π« ΠΠΠΠ¬ΠΠΠΠΠ’ΠΠΠ― β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ ββββββββββββββββ β
β β TELEGRAM BOT β β EMAIL MONITOR β β LOCAL UI β β
β β β β β β (optional) β β
β β β’ Inline ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ β β β’ IMAP ΠΊΠ°ΠΆΠ΄ΡΠ΅ 10 ΠΌΠΈΠ½ β β β’ CLI β β
β β β’ Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ ΠΎ ΡΠΎΠ±ΡΡΠΈΡΡ
β β β’ ΠΠ°ΡΡΠΈΠ½Π³ GitHub ΠΏΠΈΡΠ΅ΠΌ β β β’ Web β β
β β β’ ΠΡΠΈΠΎΡΠΈΡΠΈΠ·Π°ΡΠΈΡ Π·Π°Π΄Π°Ρ β β β’ AI ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ Π½Π° ΡΡΡΡΠΊΠΈΠΉ β β β’ TUI β β
β β β’ ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² β β β’ Callback ΠΊΠ½ΠΎΠΏΠΊΠΈ Π² TG β β β β
β βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Π£Π ΠΠΠΠΠ¬ 2: Π―ΠΠ Π ΠΠ ΠΠΠ‘Π’Π ΠΠ¦ΠΠ (CORE) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β ORCHESTRATOR ENGINE β β
β β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β STATE MACHINE MANAGER β β β
β β β β β β
β β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ βββββββββββ β β
β β β β IDLE ββββββ FETCHINGββββββANALYZINGββββββ CODING ββββββTESTING ββ β β
β β β βββββββββββ βββββββββββ βββββββββββ βββββββββββ βββββ¬ββββββ β β
β β β β β β β
β β β βββββββββββ βββββββββββ β β β β
β β β βCOMPLETEDββββββCREATE_PRβββββββββββββββββββββββββββββββββββ β β β
β β β βββββββββββ βββββββββββ β β β
β β β β β β β
β β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β
β β β RETRY CONTROLLER (max 3 attempts) β β β
β β β β β β
β β β ΠΡΠΈΠ±ΠΊΠ° Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΡΠ°ΠΏΠ΅ β ΠΠΎΠ·Π²ΡΠ°Ρ ΠΊ CODING Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠΎΠΌ ΠΎΡΠΈΠ±ΠΊΠΈ β ΠΠΎΠ²ΡΠΎΡ β β β
β β β ΠΠΎΡΠ»Π΅ 3 ΠΏΠΎΠΏΡΡΠΎΠΊ β BLACKLIST β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β PRIORITY QUEUE MANAGER β β
β β β β β
β β β Π‘Π’Π Π£ΠΠ’Π£Π Π ΠΠ§ΠΠ ΠΠΠ: β β
β β β β’ Heap-based (heapq) Π΄Π»Ρ O(log n) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ β β
β β β β’ ΠΠ»ΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ: (-bounty_amount, created_at, issue_id) β β
β β β β’ Persistence: ΠΠ²ΡΠΎΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² SQLite ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ β β
β β β β’ Recovery: ΠΠΎΠ»Π½Π°Ρ Π·Π°Π³ΡΡΠ·ΠΊΠ° ΠΈΠ· ΠΠ ΠΏΡΠΈ ΡΡΠ°ΡΡΠ΅ β β
β β β β β
β β β ΠΠΠΠ ΠΠ¦ΠΠ: β β
β β β β’ put(issue) β ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ β β
β β β β’ get() β ΠΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ highest priority (thread-safe) β β
β β β β’ prioritize(issue_id, level) β Π ΡΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ° β β
β β β β’ remove(issue_id) β ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ· ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β RATE LIMIT CONTROLLER β β
β β β β β
β β β GITHUB API: β β
β β β β’ Limit: 5000 requests/hour β β
β β β β’ Window: Sliding window tracking β β
β β β β’ Action ΠΏΡΠΈ <100: ΠΠ°ΡΠ·Π° 60 ΡΠ΅ΠΊ β ΠΠΎΠ²ΡΠΎΡΠ½Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° β β
β β β β’ Action ΠΏΡΠΈ <10: ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠ°ΡΠ·Π° β Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ TG β ΠΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ β β
β β β β β
β β β OPENAI API: β β
β β β β’ Tier-based limits (RPM, TPM) β β
β β β β’ Tracking: tokens/minute, requests/minute β β
β β β β’ Action ΠΏΡΠΈ ΠΊΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ: STOP PROGRAM β Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ TG β β
β β β β β
β β β DOCKER: β β
β β β β’ Local resource limits (CPU, RAM) β β
β β β β’ Concurrent container limit: 1 (ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ°) β β
β β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Π£Π ΠΠΠΠΠ¬ 3: ΠΠΠΠ£ΠΠ ΠΠΠ’ΠΠΠ ΠΠ¦ΠΠ (ADAPTERS) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ ββββββββββββββββ β
β β GITHUB MODULE β β AI MODULE β β DOCKER MODULEβ β
β β β β β β β β
β β DUAL TOKEN ARCHITECTURE: β β PROVIDER MANAGEMENT: β β LIFECYCLE: β β
β β β’ READ_TOKEN (repo, org) β β β’ Primary: GPT-4 β β β’ Ensure β β
β β β’ WRITE_TOKEN (workflow) β β β’ Fallback: Claude-3 β β running β β
β β β β β’ Switch: Manual (TG) β β β’ Build β β
β β SUBMODULES: β β β β β’ Test β β
β β β’ Client (rate tracking) β β COMPONENTS: β β β’ Cleanup β β
β β β’ IssueAnalyzer (bounty) β β β’ PromptEngineer β β β β
β β β’ ContentAPI (<100MB) β β β’ CodeGenerator β β SECURITY: β β
β β β’ GraphQLClient (linked) β β β’ CommitMessageGenerator β β β’ Pattern β β
β β β’ PRManager (create/commit)β β β’ OutputValidator β β matching β β
β β β’ CommentManager β β β β β’ AST scan β β
β β β β TOKEN TRACKING: β β β’ Sandbox β β
β β OPERATIONS: β β β’ Input/Output per request β β β β
β β β’ Search issues by labels β β β’ Cost estimation β β RESOURCES: β β
β β β’ Detect bounty via AI β β β’ Monthly budget tracking β β β’ Fixed: β β
β β β’ Download relevant files β β β β 2-4-6 CPU β β
β β β’ Parse linked issues A+B β β β β β’ RAM: β β
β β β’ Create branch ai/123/ts β β β β 512+kb/10 β β
β β β’ Commit with AI message β β β β β β
β β β’ Create PR with body β β β β TIMEOUT: β β
β β β’ Comment on issue β β β β 25 sec β β
β βββββββββββββββββββββββββββββββ βββββββββββββββββββββββββββββββ ββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Π£Π ΠΠΠΠΠ¬ 4: Π₯Π ΠΠΠΠΠΠ©Π ΠΠΠΠΠ«Π₯ (STORAGE) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β SQLITE DATABASE SCHEMA β β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β REPOSITORIES ββ β
β β β βββββββββββββ ββ β
β β β id | owner | name | full_name | language | stars | last_checked | is_active ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β ISSUES (central entity) ββ β
β β β βββββββββββββ ββ β
β β β id | github_id | repo_id | number | title | body ββ β
β β β has_bounty | bounty_amount | bounty_currency | detected_by ββ β
β β β status (enum) | priority | queue_position ββ β
β β β linked_issue_ids [JSON] | linked_pr_numbers [JSON] ββ β
β β β attempt_count | max_attempts | created_at | updated_at | started_at ββ β
β β β completed_at | is_blacklisted | blacklist_reason ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β ATTEMPTS (retry tracking) ββ β
β β β βββββββββββββ ββ β
β β β id | issue_id | attempt_number | status (enum) ββ β
β β β ai_model_used | prompt_tokens | completion_tokens | ai_response_raw ββ β
β β β generated_code [JSON] | files_modified [JSON] ββ β
β β β docker_image | docker_cpu | docker_memory | test_duration ββ β
β β β error_message | error_traceback | security_violations [JSON] ββ β
β β β created_at ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β PULL_REQUESTS ββ β
β β β βββββββββββββ ββ β
β β β id | issue_id | github_pr_number | branch_name | commit_sha ββ β
β β β commit_message | pr_url | status | created_at | merged_at ββ β
β β β initial_comment_posted | completion_comment_posted ββ β
β β β email_notification_sent ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β BLACKLIST (permanent blocks) ββ β
β β β βββββββββββββ ββ β
β β β id | issue_id | reason | added_at | added_by | is_permanent (always TRUE) ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β ANALYTICS (success metrics) ββ β
β β β βββββββββββββ ββ β
β β β id | issue_id | estimated_bounty | actual_earned | currency ββ β
β β β time_to_solve | total_ai_tokens | github_api_calls | docker_runs ββ β
β β β success | failure_reason | language | recorded_at ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β RATE_LIMIT_LOGS (API monitoring) ββ β
β β β βββββββββββββ ββ β
β β β id | service | limit_remaining | limit_total | reset_at | warning_sent ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β TELEGRAM_LOGS (notification history) ββ β
β β β βββββββββββββ ββ β
β β β id | message_type | chat_id | message_text | issue_id | sent_at | delivered ββ β
β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β β β
β βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## 2. ΠΠΠ’ΠΠΠ¬ΠΠΠ― ΠΠΠΠΠΠ ΠΠΠ’ΠΠΠΠ (FLOW LOGIC)
### ΠΠΠ’ΠΠ 1: ΠΠ΅ΡΠ²ΠΈΡΠ½ΠΎΠ΅ ΡΠΊΠ°Π½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ (Discovery Flow)
```
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β STARTUP βββββββ LOAD REPOS βββββββ SCAN ISSUESβββββββ AI BOUNTY β
β β β from DB β β by labels β β DETECTION β
βββββββββββββββ βββββββββββββββ βββββββββββββββ ββββββββ¬βββββββ
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββ βββββββββββββββ βββββββββββββββ
β CALCULATE βββββββ INSERT βββββββ NOTIFY β
β PRIORITY β β into QUEUE β β (none) β
β (-bounty) β β β β β
βββββββββββββββ βββββββββββββββ βββββββββββββββ
```
**ΠΠΎΠ³ΠΈΠΊΠ°:**
1. ΠΡΠΈ ΡΡΠ°ΡΡΠ΅ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π² ΠΈΠ· ΠΠ (ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅ΡΠ΅Π· API)
2. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ: GraphQL Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΎΡΠΊΡΡΡΡΠ΅ issue Ρ ΠΌΠ΅ΡΠΊΠ°ΠΌΠΈ `[bounty, reward, $, paid, RTC]`
3. AI Π°Π½Π°Π»ΠΈΠ· ΡΠ΅ΠΊΡΡΠ° issue (title + body) Π½Π° Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΠΌΠΌ (`$500`, `USD 100`, `reward: 50`)
4. Π Π°ΡΡΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ°: `priority = -bounty_amount` (ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π΄Π»Ρ max-heap)
5. ΠΡΡΠ°Π²ΠΊΠ° Π² PriorityQueue Ρ ΡΠΎΡ
ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ Π² SQLite
6. **ΠΠ΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΡ** β ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ½ΠΎΠ²ΠΎΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π² ΠΎΡΠ΅ΡΠ΅Π΄Ρ
---
### ΠΠΠ’ΠΠ 2: ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° issue (Processing Flow)
```
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β QUEUE GET βββββββ FETCH βββββββ ANALYZE βββββββ GENERATE β
β (blocking) β β DATA β β CONTEXT β β CODE β
βββββββββββββββ ββββββββ¬βββββββ βββββββββββββββ ββββββββ¬βββββββ
β β
β βββββββββββββββ β
ββββββ CHECKPOINT ββββββββββββββββββββββββ
β SAVE β
βββββββββββββββ
```
**ΠΠ΅ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠ°ΠΏΠΎΠ²:**
| ΠΡΠ°ΠΏ | ΠΠ΅ΠΉΡΡΠ²ΠΈΡ | ΠΡΡ
ΠΎΠ΄ ΠΏΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ |
|------|----------|------------------|
| **FETCH** | β’ ΠΡΠΎΠ²Π΅ΡΠΈΡΡ Docker Π·Π°ΠΏΡΡΠ΅Π½ (Π°Π²ΡΠΎΠ·Π°ΠΏΡΡΠΊ)<br>β’ Content API: ΡΠΊΠ°ΡΠ°ΡΡ ΡΠ°ΠΉΠ»Ρ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ issue<br>β’ GraphQL: ΠΏΠΎΠ»ΡΡΠΈΡΡ linked issues (A+B)<br>β’ GraphQL: ΠΏΠΎΠ»ΡΡΠΈΡΡ linked PR + ΠΈΡ
ΠΊΠΎΠ΄<br>β’ ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° <100MB | `BLACKLIST` (file too large) β permanent |
| **ANALYZE** | β’ AI Π°Π½Π°Π»ΠΈΠ·: issue description + linked issues + PR ΠΊΠΎΠ΄<br>β’ Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ solution plan<br>β’ ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ | Retry (max 3) β `BLACKLIST` |
| **CODE** | β’ AI Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° ΠΏΠΎ plan<br>β’ Security scan: ΠΏΠ°ΡΡΠ΅ΡΠ½Ρ (rm -rf, System.exit, os.system)<br>β’ Commit message generation | `BLACKLIST` (security) β permanent |
| **TEST** | β’ Π Π°ΡΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ²: CPU ΡΡΡΠΏΠ΅Π½ΠΈ (2-4-6), RAM=512+kb/10<br>β’ Docker run Ρ network=none, read-only volumes<br>β’ Π’Π°ΠΉΠΌΠ°ΡΡ 25 ΡΠ΅ΠΊΡΠ½Π΄<br>β’ ΠΡΠΎΠ²Π΅ΡΠΊΠ° exit code | Retry (max 3) β `BLACKLIST` |
| **PR** | β’ Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π²Π΅ΡΠΊΠΈ `ai/{issue_number}/{timestamp}`<br>β’ Commit Ρ AI-generated message<br>β’ Push β Create PR β Comment in issue | Retry (max 3) β `BLACKLIST` |
---
### ΠΠΠ’ΠΠ 3: Email ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° (Email Flow) β **ΠΠΠΠΠΠΠΠΠΠ«Π**
```
βββββββββββββββ βββββββββββββββ βββββββββββββββ βββββββββββββββ
β IMAP CHECK βββββββ PARSE NEW βββββββ TRANSLATE βββββββ SEND TG β
β (10 min) β β "merged" PRβ β to RU β β with buttonsβ
βββββββββββββββ ββββββββ¬βββββββ βββββββββββββββ ββββββββ¬βββββββ
β β
β βββββββββββββββ β
βββββββββββ UPDATE DB ββββββββββββββββββββ
β status β
βββββββββββββββ
```
**ΠΠΎΠ³ΠΈΠΊΠ° ΠΊΠ½ΠΎΠΏΠΎΠΊ Π² Telegram:**
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β π PR #123 ΡΡΠΏΠ΅ΡΠ½ΠΎ merged! β
β Π Π΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ: owner/repo β
β Π‘ΡΠΌΠΌΠ°: $150 β
β β
β ΠΠ΅ΡΠ΅Π²ΠΎΠ΄ ΠΏΠΈΡΡΠΌΠ°: β
β "ΠΠ°Ρ pull request #123 Π±ΡΠ» ΡΡΠΏΠ΅ΡΠ½ΠΎ ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ½..." β
β β
β [π ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ] [π Π£Π΄Π°Π»ΠΈΡΡ] β
β [π Π‘ΡΠ°ΡΡΡ] [βΈ ΠΠ°ΡΠ·Π°] [β ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ] β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
**ΠΠ΅ΠΉΡΡΠ²ΠΈΡ ΠΊΠ½ΠΎΠΏΠΎΠΊ:**
| ΠΠ½ΠΎΠΏΠΊΠ° | ΠΠ΅ΠΉΡΡΠ²ΠΈΠ΅ |
|--------|----------|
| `π ΠΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ` | β’ ΠΡΠΏΡΠ°Π²ΠΈΡΡ ΠΊΠΎΠ΄ PR Π² AI<br>β’ ΠΠ°ΠΏΡΠΎΡΠΈΡΡ Π°Π½Π°Π»ΠΈΠ·: "Π§ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ»ΡΡΡΠΈΡΡ?"<br>β’ ΠΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ ΠΊΡΠΈΡΠ΅ΡΠΈΠΈ<br>β’ Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΡ insights Π² ΠΠ |
| `π Π£Π΄Π°Π»ΠΈΡΡ` | β’ ΠΡΡ
ΠΈΠ²ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΠΈΡΡ<br>β’ ΠΡΠΈΡΡΠΈΡΡ Π»ΠΎΠ³ΠΈ<br>β’ ΠΠΎΠΌΠ΅ΡΠΈΡΡ ΠΊΠ°ΠΊ "ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½ΠΎ" |
| `π Π‘ΡΠ°ΡΡΡ` | β’ ΠΠΎΠΊΠ°Π·Π°ΡΡ ΡΠ΅ΠΊΡΡΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ<br>β’ Rate limits<br>β’ ΠΠΊΡΠΈΠ²Π½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ |
| `βΈ/βΆ` | β’ ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠ°ΡΠ·Ρ<br>β’ ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ/Π²ΠΎΠ·ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ |
| `β ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ` | β’ ΠΠΎΠ΄Π΅Π»Ρ (GPT-4/Claude)<br>β’ Π’Π°ΠΉΠΌΠ°ΡΡ Docker<br>β’ CPU ΡΡΡΠΏΠ΅Π½ΠΈ |
---
## 3. ΠΠΠΠΠΠ Π‘ΠΠ‘Π’ΠΠ―ΠΠΠ (State Logic)
### State Machine: ΠΠ΅ΡΠ΅Ρ
ΠΎΠ΄Ρ ΠΈ ΡΡΠ»ΠΎΠ²ΠΈΡ
```
βββββββββββ βββββββββββ βββββββββββ βββββββββββ
β IDLE βββββββββββ FETCHINGβββββββββββANALYZINGβββββββββββ CODING β
β β start β β successβ β successβ β
βββββββββββ ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ
β β β
errorβ errorβ errorβ
βΌ βΌ βΌ
βββββββββββ βββββββββββ βββββββββββ
β RETRY β β RETRY β β RETRY β
β counter+β β counter+β β counter+β
ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ
β β β
max 3?β max 3?β max 3?
βYes βYes βYes
βΌ βΌ βΌ
βββββββββββ βββββββββββ βββββββββββ
β BLACKLISTβ β BLACKLISTβ β BLACKLISTβ
β permanentβ β permanentβ β permanentβ
βββββββββββ βββββββββββ βββββββββββ
βββββββββββ βββββββββββ βββββββββββ
β CODING βββββββββββ TESTING βββββββββββCREATE_PRβ
β β successβ β successβ β
βββββββββββ ββββββ¬βββββ ββββββ¬βββββ
errorβ errorβ
βΌ βΌ
βββββββββββ βββββββββββ
β RETRY β β RETRY β
βreturn toβ βreturn toβ
β CODING β β CODING β
βwith errorβ βwith errorβ
β context β β context β
βββββββββββ βββββββββββ
βββββββββββ βββββββββββ
βCREATE_PRβββββββββββCOMPLETEDβ
β β successβ β
βββββββββββ βββββββββββ
```
### Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠ΅ΡΠ΅Ρ
ΠΎΠ΄ΠΎΠ²:
| From | To | Condition | Action on fail |
|------|-----|-----------|----------------|
| IDLE | FETCHING | Queue not empty, Docker ready, Rate limits OK | Wait 5s, retry |
| FETCHING | ANALYZING | All files <100MB downloaded, Linked issues fetched | Blacklist (file too large) |
| ANALYZING | CODING | AI returned valid solution plan | Retry (3x) β Blacklist |
| CODING | TESTING | Security scan passed, Code generated | Blacklist (security) |
| TESTING | CREATE_PR | Docker exit code 0, within 25s | Retry (3x) β Blacklist |
| CREATE_PR | COMPLETED | PR created successfully, comment posted | Retry (3x) β Blacklist |
---
## 4. ΠΠΠΠΠΠ ΠΠΠΠΠΠΠ‘ΠΠΠ‘Π’Π (Security Logic)
### Security Scan: Π£ΡΠΎΠ²Π½ΠΈ ΡΠ³ΡΠΎΠ·
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β SECURITY SCAN LAYERS β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β LAYER 1: PATTERN MATCHING (regex) β
β ββ CRITICAL: rm -rf /, System.exit(), Runtime.exec() β
β ββ CRITICAL: os.system(), subprocess(shell=True) β
β ββ CRITICAL: eval(), exec(), __import__() β
β ββ WARNING: socket, urllib, http requests β
β ββ WARNING: absolute path access (/etc, C:\\Windows) β
β β
β LAYER 2: AST ANALYSIS (abstract syntax tree) β
β ββ ΠΡΠΎΠ²Π΅ΡΠΊΠ° ΠΈΠΌΠΏΠΎΡΡΠΎΠ² Π½Π° Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠ΄ΡΠ»ΠΈ β
β ββ ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ Π²ΡΡΠΎΠΊΠΎΠ³ΠΎ ΡΠΈΡΠΊΠ° β
β ββ ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π΄ΠΎΡΡΡΠΏΠ° ΠΊ ΡΠ°ΠΉΠ»ΠΎΠ²ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ β
β β
β LAYER 3: DOCKER ISOLATION β
β ββ Network: none (ΠΏΠΎΠ»Π½Π°Ρ ΠΈΠ·ΠΎΠ»ΡΡΠΈΡ) β
β ββ Filesystem: read-only volumes β
β ββ Resources: CPU/RAM limits β
β ββ No privilege escalation β
β ββ Auto-kill after 25s timeout β
β β
β LAYER 4: BLACKLIST ENFORCEMENT β
β ββ Permanent ban for security violations β
β ββ Permanent ban for 3 failed attempts β
β ββ Permanent ban for files >100MB β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
### Π Π΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠ³ΡΠΎΠ·Ρ:
| Π£ΡΠΎΠ²Π΅Π½Ρ | ΠΠ±Π½Π°ΡΡΠΆΠ΅Π½ΠΈΠ΅ | Π Π΅Π°ΠΊΡΠΈΡ | Blacklist |
|---------|-------------|---------|-----------|
| CRITICAL | ΠΠ°ΠΏΡΠ΅ΡΡΠ½Π½ΡΠΉ ΠΏΠ°ΡΡΠ΅ΡΠ½ Π² ΠΊΠΎΠ΄Π΅ | ΠΠ΅ΠΌΠ΅Π΄Π»Π΅Π½Π½Π°Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ°, ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ TG | **PERMANENT** |
| WARNING | ΠΠΎΠ΄ΠΎΠ·ΡΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΈΠΌΠΏΠΎΡΡ | ΠΠΎΠ³ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅, ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½Π½ΡΠΌ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³ΠΎΠΌ | ΠΠ΅Ρ |
| DOCKER FAIL | ΠΡΡ
ΠΎΠ΄ Π·Π° ΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° | Π£Π±ΠΈΠΉΡΡΠ²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°, Π°Π½Π°Π»ΠΈΠ· Π»ΠΎΠ³ΠΎΠ² | ΠΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°ΠΌ |
| TIMEOUT | >25s Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ | ΠΡΠ΅ΡΡΠ²Π°Π½ΠΈΠ΅, retry Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ | ΠΠΎΡΠ»Π΅ 3 ΠΏΠΎΠΏΡΡΠΎΠΊ |
---
## 5. ΠΠΠΠΠΠ Π ΠΠ‘Π£Π Π‘ΠΠ (Resource Logic)
### Docker Resource Calculation: Π€ΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΏΠ΅Π½ΠΈ
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CPU ALLOCATION (ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΡΡΠΏΠ΅Π½ΠΈ) β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Π Π°Π·ΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° (ΡΡΡΠΎΠΊ) β CPU β ΠΡΠΈΠΌΠ΅Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ° β
β ββββββββββββββββββββββββΌβββββββββΌβββββββββββββββββββββββββ β
β < 1,000 β 2 β ΠΡΠΎΡΡΠΎΠΉ ΡΠΊΡΠΈΠΏΡ β
β 1,000 - 5,000 β 4 β Π‘ΡΠ΅Π΄Π½ΠΈΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ β
β > 5,000 β 6 β ΠΠΎΠ»ΡΡΠΎΠΉ ΡΠ΅ΡΠ²ΠΈΡ β
β β
β RAM = 512MB + (file_size_kb / 10) β
β ΠΡΠΈΠΌΠ΅Ρ: ΡΠ°ΠΉΠ» 1024KB β 512 + 102.4 = ~614MB β
β β
β HARD LIMITS: β
β β’ CPU: max 6 (Π½Π΅ Π±ΠΎΠ»Π΅Π΅ 6 ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΠ΄Π΅Ρ) β
β β’ RAM: max 4096MB (4GB) β
β β’ Swap: disabled (memswap = memory) β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
### Rate Limit Management:
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β RATE LIMIT STATES β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β GITHUB API: β
β ββ GREEN (>1000): ΠΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° β
β ββ YELLOW (100-1000): ΠΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Π»ΠΎΠ³Π°Ρ
β
β ββ ORANGE (10-100): Π£Π²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ TG, ΠΏΠ°ΡΠ·Π° 60s β
β ββ RED (<10): ΠΡΠΈΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΠΏΠ°ΡΠ·Π°, ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ reset β
β β
β OPENAI API: β
β ββ GREEN: ΠΠΎΡΠΌΠ°Π»ΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ° β
β ββ YELLOW: ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π½Π° Claude (Π΅ΡΠ»ΠΈ Π΄ΠΎΡΡΡΠΏΠ΅Π½) β
β ββ RED: STOP PROGRAM, ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ TG β
β β
β DOCKER: β
β ββ GREEN: ΠΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π·Π°ΠΏΡΡΠ΅Π½, ΡΠ΅ΡΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½Ρ β
β ββ YELLOW: ΠΡΡΠΎΠΊΠ°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ° CPU/RAM β
β ββ RED: ΠΠ΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ β ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠ° β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## 6. ΠΠΠΠΠΠ ΠΠΠ‘Π‘Π’ΠΠΠΠΠΠΠΠΠ― (Recovery Logic)
### Checkpoint System:
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β CHECKPOINT STRATEGY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β Π‘ΠΠ₯Π ΠΠΠ―ΠΠ Π² SQLite ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π³Π°: β
β β’ FETCHING β files_downloaded, linked_issues β
β β’ ANALYZING β solution_plan, context β
β β’ CODING β generated_code, commit_message β
β β’ TESTING β test_results, docker_logs β
β β’ CREATE_PR β pr_number, branch_name, commit_sha β
β β
β ΠΠ Π Π‘ΠΠΠ (crash/restart): β
β 1. ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π²ΡΠ΅ issue ΡΠΎ status β completed/failed β
β 2. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ: ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ successful checkpoint β
β 3. ΠΠΎΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ state machine Ρ ΡΡΠΎΠ³ΠΎ ΡΠ°Π³Π° β
β 4. ΠΡΠΎΠ΄ΠΎΠ»ΠΆΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ β
β β
β ΠΠ Π ΠΠ¨ΠΠΠΠ (error in step): β
β 1. Π‘ΠΎΡ
ΡΠ°Π½ΠΈΡΡ error_details Π² attempts ΡΠ°Π±Π»ΠΈΡΡ β
β 2. Increment attempt_counter β
β 3. If attempt < 3 β return to CODING with error context β
β 4. If attempt >= 3 β BLACKLIST permanent β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## 7. ΠΠΠ’ΠΠΠ ΠΠ¦ΠΠΠΠΠΠ― Π‘Π₯ΠΠΠ (Integration Map)
```
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β EXTERNAL SERVICES MAP β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ€
β β
β GITHUB.COM OPENAI API DOCKER DESKTOP β
β βββββββββββ βββββββββββ ββββββββββββββ β
β β’ REST API v3 β’ GPT-4 (primary) β’ Local daemonβ
β β’ GraphQL API v4 β’ Claude-3 (manual fallback) β’ Windows exeβ
β β’ Dual tokens (read/write) β’ Token counting β’ Images: β
β β’ Webhooks (optional) β’ Rate limit tracking python:3.11 β
β β’ Cost tracking openjdk:17 β
β β
β TELEGRAM API GMAIL IMAP LOCAL SYSTEM β
β βββββββββββ βββββββββββ ββββββββββββββ β
β β’ Bot API (aiogram 3) β’ imap.gmail.com:993 β’ SQLite DB β
β β’ Inline keyboards β’ App Password β’ File system β
β β’ Callback queries β’ 10-min polling β’ Logs (JSON) β
β β’ Chat notifications β’ HTML/Plain text parsing β
β β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
```
---
## 8. ΠΠΠΠΠΠΠΠ«Π Π¦ΠΠΠ ΠΠΠΠΠ§Π (Issue Lifecycle)
```
CREATED (Π²ΡΡΡΠ½ΡΡ ΠΈΠ»ΠΈ ΡΠΊΠ°Π½Π΅ΡΠΎΠΌ)
β
βΌ
βββββββββββ
β PENDING βββββββββββββββββββββββββββββββββββββββββββ
β β β
ββββββ¬βββββ β
β β
β queue.get() β
βΌ β
βββββββββββ βββββββββββ βββββββββββ β
βFETCHING βββββββANALYZINGβββββββ CODING β β
β β β β β β β
ββββββ¬βββββ ββββββ¬βββββ ββββββ¬βββββ β
β β β β
βerror βerror βerror β
β β β β
βΌ βΌ βΌ β
βββββββββββ βββββββββββ βββββββββββ β
β BLACKLISTβ β RETRY β β RETRY β β
β permanentβ β (1/3) β β (2/3) β β
βββββββββββ ββββββ¬βββββ ββββββ¬βββββ β
β β β
βββββββββββββββββ β
β β
βΌ β
βββββββββββ β
β RETRY ββββββββββββββ
β (3/3) β return to CODING
ββββββ¬βββββ with error context
β
errorβ
βΌ
βββββββββββ
β BLACKLISTβ
β permanentβ
βββββββββββ
SUCCESS PATH:
CODING βββ TESTING βββ CREATE_PR βββ COMPLETED
β β
β βΌ
β βββββββββββ
β β NOTIFY β
β β TG: PR β
β β createdβ
β ββββββ¬βββββ
β β
βΌ βΌ
βββββββββββ βββββββββββ
β EMAIL β β EMAIL β
β wait βββββ merged β
β 10 min β β check β
ββββββ¬βββββ ββββββ¬βββββ
β β
βΌ βΌ
βββββββββββ βββββββββββ
β NOTIFY β β NOTIFY β
β TG: β β TG: β
β success β β merged β
β $ earnedβ β +buttonsβ
βββββββββββ βββββββββββ
ΠΡΠΎ ΠΏΠΎΠ»Π½Π°Ρ Π³Π»ΡΠ±ΠΎΠΊΠ°Ρ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ° Π±Π΅Π· ΠΊΠΎΠ΄Π°. ΠΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ, ΠΏΠΎΡΠΎΠΊΠΈ Π΄Π°Π½Π½ΡΡ
, ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈ Π»ΠΎΠ³ΠΈΠΊΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Ρ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.