atabey 0.1.1-beta → 0.1.3
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.
- package/README.md +145 -79
- package/dist/atabey/src/cli/commands/coverage.js +17 -12
- package/dist/atabey/src/cli/commands/coverage.js.map +1 -1
- package/dist/atabey/src/cli/commands/lint.d.ts +2 -1
- package/dist/atabey/src/cli/commands/lint.js +20 -1
- package/dist/atabey/src/cli/commands/lint.js.map +1 -1
- package/dist/atabey/src/cli/commands/mcp.js +56 -23
- package/dist/atabey/src/cli/commands/mcp.js.map +1 -1
- package/dist/atabey/src/cli/commands/orchestrate.d.ts +6 -6
- package/dist/atabey/src/cli/index.js +1 -1
- package/dist/shared/src/agent-identity.d.ts +1 -34
- package/dist/shared/src/agent-identity.js +1 -76
- package/dist/shared/src/agent-identity.js.map +1 -1
- package/dist/shared/src/api-catalog.d.ts +1 -57
- package/dist/shared/src/api-catalog.js +1 -253
- package/dist/shared/src/api-catalog.js.map +1 -1
- package/dist/shared/src/audit-chain.d.ts +1 -80
- package/dist/shared/src/audit-chain.js +1 -261
- package/dist/shared/src/audit-chain.js.map +1 -1
- package/dist/shared/src/audit.d.ts +1 -121
- package/dist/shared/src/audit.js +1 -321
- package/dist/shared/src/audit.js.map +1 -1
- package/dist/shared/src/constants.d.ts +1 -150
- package/dist/shared/src/constants.js +1 -211
- package/dist/shared/src/constants.js.map +1 -1
- package/dist/shared/src/database.d.ts +1 -6
- package/dist/shared/src/database.js +1 -15
- package/dist/shared/src/database.js.map +1 -1
- package/dist/shared/src/errors.d.ts +1 -46
- package/dist/shared/src/errors.js +1 -68
- package/dist/shared/src/errors.js.map +1 -1
- package/dist/shared/src/file-lock.d.ts +1 -93
- package/dist/shared/src/file-lock.js +1 -239
- package/dist/shared/src/file-lock.js.map +1 -1
- package/dist/shared/src/fs.d.ts +1 -9
- package/dist/shared/src/fs.js +1 -53
- package/dist/shared/src/fs.js.map +1 -1
- package/dist/shared/src/index.d.ts +2 -31
- package/dist/shared/src/index.js +2 -31
- package/dist/shared/src/index.js.map +1 -1
- package/dist/shared/src/job-queue.d.ts +1 -76
- package/dist/shared/src/job-queue.js +1 -199
- package/dist/shared/src/job-queue.js.map +1 -1
- package/dist/shared/src/lock.d.ts +1 -82
- package/dist/shared/src/lock.js +1 -158
- package/dist/shared/src/lock.js.map +1 -1
- package/dist/shared/src/logger.d.ts +1 -31
- package/dist/shared/src/logger.js +1 -152
- package/dist/shared/src/logger.js.map +1 -1
- package/dist/shared/src/memory-prune.d.ts +1 -18
- package/dist/shared/src/memory-prune.js +1 -47
- package/dist/shared/src/memory-prune.js.map +1 -1
- package/dist/shared/src/migrations.d.ts +1 -69
- package/dist/shared/src/migrations.js +1 -393
- package/dist/shared/src/migrations.js.map +1 -1
- package/dist/shared/src/modules/agent/agent-identity.d.ts +34 -0
- package/dist/shared/src/modules/agent/agent-identity.js +77 -0
- package/dist/shared/src/modules/agent/agent-identity.js.map +1 -0
- package/dist/shared/src/modules/agent/api-catalog.d.ts +57 -0
- package/dist/shared/src/modules/agent/api-catalog.js +254 -0
- package/dist/shared/src/modules/agent/api-catalog.js.map +1 -0
- package/dist/shared/src/modules/agent/index.d.ts +3 -0
- package/dist/shared/src/modules/agent/index.js +4 -0
- package/dist/shared/src/modules/agent/index.js.map +1 -0
- package/dist/shared/src/modules/agent/tokenizer.d.ts +54 -0
- package/dist/shared/src/modules/agent/tokenizer.js +272 -0
- package/dist/shared/src/modules/agent/tokenizer.js.map +1 -0
- package/dist/shared/src/modules/concurrency/file-lock.d.ts +93 -0
- package/dist/shared/src/modules/concurrency/file-lock.js +240 -0
- package/dist/shared/src/modules/concurrency/file-lock.js.map +1 -0
- package/dist/shared/src/modules/concurrency/index.d.ts +6 -0
- package/dist/shared/src/modules/concurrency/index.js +7 -0
- package/dist/shared/src/modules/concurrency/index.js.map +1 -0
- package/dist/shared/src/modules/concurrency/job-queue.d.ts +76 -0
- package/dist/shared/src/modules/concurrency/job-queue.js +200 -0
- package/dist/shared/src/modules/concurrency/job-queue.js.map +1 -0
- package/dist/shared/src/modules/concurrency/lock.d.ts +82 -0
- package/dist/shared/src/modules/concurrency/lock.js +159 -0
- package/dist/shared/src/modules/concurrency/lock.js.map +1 -0
- package/dist/shared/src/modules/concurrency/resilience.d.ts +84 -0
- package/dist/shared/src/modules/concurrency/resilience.js +217 -0
- package/dist/shared/src/modules/concurrency/resilience.js.map +1 -0
- package/dist/shared/src/modules/concurrency/worker-pool.d.ts +52 -0
- package/dist/shared/src/modules/concurrency/worker-pool.js +229 -0
- package/dist/shared/src/modules/concurrency/worker-pool.js.map +1 -0
- package/dist/shared/src/modules/concurrency/worker-thread.d.ts +21 -0
- package/dist/shared/src/modules/concurrency/worker-thread.js +67 -0
- package/dist/shared/src/modules/concurrency/worker-thread.js.map +1 -0
- package/dist/shared/src/modules/index.d.ts +14 -0
- package/dist/shared/src/modules/index.js +15 -0
- package/dist/shared/src/modules/index.js.map +1 -0
- package/dist/shared/src/modules/observability/audit-chain.d.ts +80 -0
- package/dist/shared/src/modules/observability/audit-chain.js +262 -0
- package/dist/shared/src/modules/observability/audit-chain.js.map +1 -0
- package/dist/shared/src/modules/observability/audit.d.ts +121 -0
- package/dist/shared/src/modules/observability/audit.js +322 -0
- package/dist/shared/src/modules/observability/audit.js.map +1 -0
- package/dist/shared/src/modules/observability/index.d.ts +4 -0
- package/dist/shared/src/modules/observability/index.js +5 -0
- package/dist/shared/src/modules/observability/index.js.map +1 -0
- package/dist/shared/src/modules/observability/logger.d.ts +31 -0
- package/dist/shared/src/modules/observability/logger.js +153 -0
- package/dist/shared/src/modules/observability/logger.js.map +1 -0
- package/dist/shared/src/modules/observability/otel.d.ts +39 -0
- package/dist/shared/src/modules/observability/otel.js +93 -0
- package/dist/shared/src/modules/observability/otel.js.map +1 -0
- package/dist/shared/src/modules/primitives/constants.d.ts +150 -0
- package/dist/shared/src/modules/primitives/constants.js +212 -0
- package/dist/shared/src/modules/primitives/constants.js.map +1 -0
- package/dist/shared/src/modules/primitives/errors.d.ts +46 -0
- package/dist/shared/src/modules/primitives/errors.js +69 -0
- package/dist/shared/src/modules/primitives/errors.js.map +1 -0
- package/dist/shared/src/modules/primitives/fs.d.ts +9 -0
- package/dist/shared/src/modules/primitives/fs.js +54 -0
- package/dist/shared/src/modules/primitives/fs.js.map +1 -0
- package/dist/shared/src/modules/primitives/index.d.ts +7 -0
- package/dist/shared/src/modules/primitives/index.js +8 -0
- package/dist/shared/src/modules/primitives/index.js.map +1 -0
- package/dist/shared/src/modules/primitives/outbound-http.d.ts +32 -0
- package/dist/shared/src/modules/primitives/outbound-http.js +88 -0
- package/dist/shared/src/modules/primitives/outbound-http.js.map +1 -0
- package/dist/shared/src/modules/primitives/string.d.ts +1 -0
- package/dist/shared/src/modules/primitives/string.js +30 -0
- package/dist/shared/src/modules/primitives/string.js.map +1 -0
- package/dist/shared/src/modules/primitives/time.d.ts +5 -0
- package/dist/shared/src/modules/primitives/time.js +35 -0
- package/dist/shared/src/modules/primitives/time.js.map +1 -0
- package/dist/shared/src/modules/primitives/types.d.ts +27 -0
- package/dist/shared/src/modules/primitives/types.js +17 -0
- package/dist/shared/src/modules/primitives/types.js.map +1 -0
- package/dist/shared/src/modules/sandbox/index.d.ts +3 -0
- package/dist/shared/src/modules/sandbox/index.js +4 -0
- package/dist/shared/src/modules/sandbox/index.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.d.ts +28 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.js +143 -0
- package/dist/shared/src/modules/sandbox/sandbox-fs.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.d.ts +78 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.js +282 -0
- package/dist/shared/src/modules/sandbox/sandbox-runtime.js.map +1 -0
- package/dist/shared/src/modules/sandbox/sandbox.d.ts +54 -0
- package/dist/shared/src/modules/sandbox/sandbox.js +179 -0
- package/dist/shared/src/modules/sandbox/sandbox.js.map +1 -0
- package/dist/shared/src/modules/security/index.d.ts +5 -0
- package/dist/shared/src/modules/security/index.js +6 -0
- package/dist/shared/src/modules/security/index.js.map +1 -0
- package/dist/shared/src/modules/security/pii.d.ts +70 -0
- package/dist/shared/src/modules/security/pii.js +276 -0
- package/dist/shared/src/modules/security/pii.js.map +1 -0
- package/dist/shared/src/modules/security/policy-gate.d.ts +42 -0
- package/dist/shared/src/modules/security/policy-gate.js +172 -0
- package/dist/shared/src/modules/security/policy-gate.js.map +1 -0
- package/dist/shared/src/modules/security/retention.d.ts +68 -0
- package/dist/shared/src/modules/security/retention.js +218 -0
- package/dist/shared/src/modules/security/retention.js.map +1 -0
- package/dist/shared/src/modules/security/secrets.d.ts +99 -0
- package/dist/shared/src/modules/security/secrets.js +371 -0
- package/dist/shared/src/modules/security/secrets.js.map +1 -0
- package/dist/shared/src/modules/security/tls.d.ts +87 -0
- package/dist/shared/src/modules/security/tls.js +154 -0
- package/dist/shared/src/modules/security/tls.js.map +1 -0
- package/dist/shared/src/modules/storage/database.d.ts +6 -0
- package/dist/shared/src/modules/storage/database.js +16 -0
- package/dist/shared/src/modules/storage/database.js.map +1 -0
- package/dist/shared/src/modules/storage/index.d.ts +4 -0
- package/dist/shared/src/modules/storage/index.js +5 -0
- package/dist/shared/src/modules/storage/index.js.map +1 -0
- package/dist/shared/src/modules/storage/memory-prune.d.ts +18 -0
- package/dist/shared/src/modules/storage/memory-prune.js +48 -0
- package/dist/shared/src/modules/storage/memory-prune.js.map +1 -0
- package/dist/shared/src/modules/storage/migrations.d.ts +69 -0
- package/dist/shared/src/modules/storage/migrations.js +394 -0
- package/dist/shared/src/modules/storage/migrations.js.map +1 -0
- package/dist/shared/src/modules/storage/storage.d.ts +341 -0
- package/dist/shared/src/modules/storage/storage.js +1004 -0
- package/dist/shared/src/modules/storage/storage.js.map +1 -0
- package/dist/shared/src/otel.d.ts +1 -39
- package/dist/shared/src/otel.js +1 -92
- package/dist/shared/src/otel.js.map +1 -1
- package/dist/shared/src/outbound-http.d.ts +1 -32
- package/dist/shared/src/outbound-http.js +1 -87
- package/dist/shared/src/outbound-http.js.map +1 -1
- package/dist/shared/src/pii.d.ts +1 -70
- package/dist/shared/src/pii.js +1 -275
- package/dist/shared/src/pii.js.map +1 -1
- package/dist/shared/src/policy-gate.d.ts +1 -42
- package/dist/shared/src/policy-gate.js +1 -171
- package/dist/shared/src/policy-gate.js.map +1 -1
- package/dist/shared/src/resilience.d.ts +1 -84
- package/dist/shared/src/resilience.js +1 -216
- package/dist/shared/src/resilience.js.map +1 -1
- package/dist/shared/src/retention.d.ts +1 -68
- package/dist/shared/src/retention.js +1 -217
- package/dist/shared/src/retention.js.map +1 -1
- package/dist/shared/src/sandbox-fs.d.ts +1 -28
- package/dist/shared/src/sandbox-fs.js +1 -142
- package/dist/shared/src/sandbox-fs.js.map +1 -1
- package/dist/shared/src/sandbox-runtime.d.ts +1 -78
- package/dist/shared/src/sandbox-runtime.js +1 -281
- package/dist/shared/src/sandbox-runtime.js.map +1 -1
- package/dist/shared/src/sandbox.d.ts +1 -54
- package/dist/shared/src/sandbox.js +1 -178
- package/dist/shared/src/sandbox.js.map +1 -1
- package/dist/shared/src/secrets.d.ts +1 -99
- package/dist/shared/src/secrets.js +1 -370
- package/dist/shared/src/secrets.js.map +1 -1
- package/dist/shared/src/storage.d.ts +1 -341
- package/dist/shared/src/storage.js +1 -1003
- package/dist/shared/src/storage.js.map +1 -1
- package/dist/shared/src/string.d.ts +1 -1
- package/dist/shared/src/string.js +1 -29
- package/dist/shared/src/string.js.map +1 -1
- package/dist/shared/src/time.d.ts +1 -5
- package/dist/shared/src/time.js +1 -34
- package/dist/shared/src/time.js.map +1 -1
- package/dist/shared/src/tls.d.ts +1 -87
- package/dist/shared/src/tls.js +1 -153
- package/dist/shared/src/tls.js.map +1 -1
- package/dist/shared/src/tokenizer.d.ts +1 -54
- package/dist/shared/src/tokenizer.js +1 -271
- package/dist/shared/src/tokenizer.js.map +1 -1
- package/dist/shared/src/types.d.ts +1 -27
- package/dist/shared/src/types.js +1 -16
- package/dist/shared/src/types.js.map +1 -1
- package/dist/shared/src/worker-pool.d.ts +1 -52
- package/dist/shared/src/worker-pool.js +1 -228
- package/dist/shared/src/worker-pool.js.map +1 -1
- package/dist/shared/src/worker-thread.d.ts +1 -21
- package/dist/shared/src/worker-thread.js +1 -66
- package/dist/shared/src/worker-thread.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -1,10 +1,19 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Atabey — Local AI Control Plane & Discipline Layer (Core Engine)
|
|
2
2
|
|
|
3
|
-
[](https://github.com/ysf-bkr/atabey)
|
|
4
4
|
[](https://www.npmjs.com/package/atabey)
|
|
5
5
|
[](https://www.gnu.org/licenses/agpl-3.0)
|
|
6
6
|
|
|
7
|
-
**Atabey Core Engine** is the CLI and orchestration layer of the Atabey framework
|
|
7
|
+
**Atabey Core Engine** is the CLI and orchestration layer of the Atabey framework: the multi-agent system, governance engines, routing engine, risk assessment, quality gates, evaluation & learning, contract management, phase management, memory systems, skill definitions and provider integrations.
|
|
8
|
+
|
|
9
|
+
**Atabey** is a **local AI control plane & discipline layer** that sits between your
|
|
10
|
+
codebase and your local AI coding assistants. It does **not** write code and does **not**
|
|
11
|
+
host an LLM — it **disciplines, bounds and coordinates** the assistant you already use
|
|
12
|
+
through the Model Context Protocol (MCP).
|
|
13
|
+
|
|
14
|
+
> "Order from Chaos" — keeps AI coding assistants focused, blocks destructive actions,
|
|
15
|
+
> rolls back broken edits, prevents runaway token loops, and records an audit trail.
|
|
16
|
+
|
|
8
17
|
|
|
9
18
|
---
|
|
10
19
|
|
|
@@ -12,14 +21,15 @@
|
|
|
12
21
|
|
|
13
22
|
| Capability | Description |
|
|
14
23
|
|-----------|-------------|
|
|
15
|
-
| **CLI** |
|
|
24
|
+
| **CLI** | 27 commands for initialization, orchestration, status, compliance and memory |
|
|
16
25
|
| **Engines** | 9 engines: routing, risk, quality, evaluation, health, planning, agent-executor, agent-loop, crud-governance |
|
|
17
|
-
| **Agents** | 13 specialized agent definitions with 3-tier hierarchy (Supreme/Core/Recon) |
|
|
26
|
+
| **Agents** | 13 specialized agent definitions with a 3-tier hierarchy (Supreme / Core / Recon) |
|
|
27
|
+
| **Runtime** | Headless CLI adapters, DAG dispatcher, git-worktree isolation, signed evidence bundles |
|
|
18
28
|
| **Memory** | 3-layer memory: vector (TF-IDF/OpenAI), project, specialty |
|
|
19
|
-
| **Skills** | 11 core skills
|
|
29
|
+
| **Skills** | 11 core skills mapped across 8 platform adapters |
|
|
20
30
|
| **Providers** | 8 platform adapters: Claude, Gemini, Cursor, Codex, Antigravity, Grok, Local LLM, OpenCode |
|
|
21
|
-
| **Contracts** | Zod-schema task contracts
|
|
22
|
-
| **Standards** |
|
|
31
|
+
| **Contracts** | Zod-schema task contracts and API contracts |
|
|
32
|
+
| **Standards** | 33 governance standard templates |
|
|
23
33
|
|
|
24
34
|
---
|
|
25
35
|
|
|
@@ -32,10 +42,10 @@ npm install -g atabey
|
|
|
32
42
|
## Quick Start
|
|
33
43
|
|
|
34
44
|
```bash
|
|
35
|
-
# Initialize
|
|
45
|
+
# Initialize Atabey inside your project
|
|
36
46
|
npx atabey init gemini --profile freelancer --yes
|
|
37
47
|
|
|
38
|
-
# Verify
|
|
48
|
+
# Verify
|
|
39
49
|
npx atabey status
|
|
40
50
|
```
|
|
41
51
|
|
|
@@ -54,7 +64,7 @@ npx atabey status
|
|
|
54
64
|
| **@database** | Core | 9/10 | Database management, migrations, queries |
|
|
55
65
|
| **@analyst** | Recon | 8/10 | Strategy analysis, requirements |
|
|
56
66
|
| **@mobile** | Core | 8/10 | React Native mobile development |
|
|
57
|
-
| **@native** | Recon | 8/10 | Native platform integration |
|
|
67
|
+
| **@native** | Recon | 8/10 | Native platform integration (Rust/Go only) |
|
|
58
68
|
| **@devops** | Core | 8/10 | CI/CD, deploy, infrastructure |
|
|
59
69
|
| **@explorer** | Recon | 8/10 | Codebase discovery, analysis |
|
|
60
70
|
| **@git** | Recon | 8/10 | Version control, commit management |
|
|
@@ -65,30 +75,27 @@ npx atabey status
|
|
|
65
75
|
|
|
66
76
|
| Engine | File | Description |
|
|
67
77
|
|--------|------|-------------|
|
|
68
|
-
| **RoutingEngine** | `routing-engine.ts` | TF-IDF +
|
|
69
|
-
| **RiskEngine** | `risk-engine.ts` | Keyword + path + behavioral risk assessment (
|
|
78
|
+
| **RoutingEngine** | `routing-engine.ts` | TF-IDF + semantic (cosine similarity) task routing, 60/40 blend |
|
|
79
|
+
| **RiskEngine** | `risk-engine.ts` | Keyword + path + behavioral risk assessment (requires approval ≥ 60) |
|
|
70
80
|
| **QualityGate** | `quality-gate.ts` | Compliance AST scan + lint + content validation |
|
|
71
|
-
| **EvaluationEngine** | `evaluation-engine.ts` | Post-task scoring (0
|
|
72
|
-
| **HealthEngine** | `health-engine.ts` | Weighted project health: agent
|
|
73
|
-
| **PlanningEngine** | `planning-engine.ts` | DAG-based task plan creation + circular
|
|
81
|
+
| **EvaluationEngine** | `evaluation-engine.ts` | Post-task scoring (0–100), specialty-memory learning |
|
|
82
|
+
| **HealthEngine** | `health-engine.ts` | Weighted project health: agent 30% · quality 25% · security 25% · architecture 20% |
|
|
83
|
+
| **PlanningEngine** | `planning-engine.ts` | DAG-based task plan creation + circular-dependency detection |
|
|
74
84
|
| **AgentExecutor** | `agent-executor.ts` | Hermes message-based agent task distribution with 3 retries |
|
|
75
85
|
| **AgentLoop** | `agent-loop.ts` | Background polling loop consuming DELEGATION messages |
|
|
76
|
-
| **CrudGovernance** | `crud-governance.ts` | CRUD operation governance rules |
|
|
86
|
+
| **CrudGovernance** | `crud-governance.ts` | CRUD / administrative operation governance rules |
|
|
77
87
|
|
|
78
|
-
> Contract
|
|
79
|
-
>
|
|
88
|
+
> Contract, policy, phase and session logic lives in the CLI commands and `atabey-shared`;
|
|
89
|
+
> atomic file locking is `AtomicFileLock` in `packages/shared`.
|
|
80
90
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
## 🧠 3-Layer Memory System
|
|
91
|
+
## 3-Layer Memory System
|
|
84
92
|
|
|
85
93
|
| Layer | Storage | Technology | Purpose |
|
|
86
94
|
|-------|---------|------------|---------|
|
|
87
|
-
| **Vector Memory** | SQLite | TF-IDF / OpenAI embeddings +
|
|
95
|
+
| **Vector Memory** | SQLite | TF-IDF / OpenAI embeddings + cosine similarity | Semantic search across project knowledge |
|
|
88
96
|
| **Project Memory** | Markdown | `PROJECT_MEMORY.md` | Central project state, synchronized every session |
|
|
89
97
|
| **Specialty Memory** | Markdown | `.atabey/memory/specialties/{agent}.md` | Per-agent learned conventions from past tasks |
|
|
90
98
|
|
|
91
|
-
### Memory Flow
|
|
92
99
|
```
|
|
93
100
|
Task → Evaluation Engine → Score (0-100)
|
|
94
101
|
├── Success → extractSuccessLesson() → updateSpecialtyMemory()
|
|
@@ -97,6 +104,7 @@ Task → Evaluation Engine → Score (0-100)
|
|
|
97
104
|
Next session: readLearnedConventions() → injected into agent prompt
|
|
98
105
|
```
|
|
99
106
|
|
|
107
|
+
|
|
100
108
|
---
|
|
101
109
|
|
|
102
110
|
## 🎯 11 Core Skills
|
|
@@ -110,18 +118,23 @@ Task → Evaluation Engine → Score (0-100)
|
|
|
110
118
|
| **QUALITY_ASSURANCE** | run_shell_command, read_file | Testing & code quality |
|
|
111
119
|
| **DATABASE_MANAGEMENT** | read_file, replace_text, run_shell_command | DB & migrations |
|
|
112
120
|
| **DEVOPS_INFRASTRUCTURE** | run_shell_command, read_file | CI/CD & deployment |
|
|
121
|
+
| **SECURITY_AUDIT** | grep_search, read_file, http_proxy_request | Vulnerability assessment |
|
|
122
|
+
| **FRONTEND_DEVELOPMENT** | write_file, replace_text, run_shell_command | UI & component design |
|
|
123
|
+
| **MOBILE_DEVELOPMENT** | write_file, replace_text | Mobile & cross-platform |
|
|
124
|
+
| **GIT_WORKFLOW** | run_shell_command, git | Version control discipline |
|
|
113
125
|
|
|
114
126
|
### Platform Adapter Skills
|
|
115
127
|
|
|
116
128
|
| Platform | Skills | Tool Count |
|
|
117
129
|
|----------|--------|:----------:|
|
|
118
|
-
| **Claude Code** ⭐ | file_system, editing, orchestration, governance, quality, search, memory | 20
|
|
119
|
-
| **Gemini CLI** | file_system, editing, orchestration, governance, quality, search | 14
|
|
120
|
-
| **Cursor IDE** | file_system, editing, search, quality | 9
|
|
121
|
-
| **Codex CLI** | file_system, editing, search, quality | 9
|
|
122
|
-
| **Antigravity CLI** | file_system, editing, orchestration, governance, quality, search | 14
|
|
123
|
-
| **Grok** | file_system, editing, search, quality | 9
|
|
124
|
-
| **Local LLM** | file_system, editing, orchestration, governance, quality, search | 14
|
|
130
|
+
| **Claude Code** ⭐ | file_system, editing, orchestration, governance, quality, search, memory | 20 |
|
|
131
|
+
| **Gemini CLI** | file_system, editing, orchestration, governance, quality, search | 14 |
|
|
132
|
+
| **Cursor IDE** | file_system, editing, search, quality | 9 |
|
|
133
|
+
| **Codex CLI** | file_system, editing, search, quality | 9 |
|
|
134
|
+
| **Antigravity CLI** | file_system, editing, orchestration, governance, quality, search | 14 |
|
|
135
|
+
| **Grok** | file_system, editing, search, quality | 9 |
|
|
136
|
+
| **Local LLM** | file_system, editing, orchestration, governance, quality, search | 14 |
|
|
137
|
+
| **OpenCode** | file_system, editing, orchestration, governance, quality, search | 14 |
|
|
125
138
|
|
|
126
139
|
---
|
|
127
140
|
|
|
@@ -138,44 +151,56 @@ Task → Evaluation Engine → Score (0-100)
|
|
|
138
151
|
| **Performance** | performance-standards, observability-standards |
|
|
139
152
|
| **UI/UX** | tailwind-standards, react-query-standards, react-router-standards |
|
|
140
153
|
| **Data** | typeorm-standards, vite-standards |
|
|
141
|
-
| **
|
|
154
|
+
| **Reporting** | pino-standards, swagger-standards |
|
|
142
155
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
## 🔌 8 Platform Adapters
|
|
156
|
+
## 8 Platform Adapters
|
|
146
157
|
|
|
147
158
|
| Platform | Framework Dir | Agents Dir | Shim File |
|
|
148
159
|
|----------|---------------|------------|-----------|
|
|
149
160
|
| **Claude Code** | `.claude` | `.claude/agents/*.md` | `CLAUDE.md` |
|
|
150
161
|
| **Gemini CLI** | `.gemini` | `.gemini/agents/*.md` | `GEMINI.md` |
|
|
151
162
|
| **Cursor IDE** | `.cursor` | `.cursor/rules/*.mdc` | `CURSOR.md` |
|
|
152
|
-
| **Codex CLI** | `.agents` | `.agents/instructions/*.md` | `copilot-instructions.md` |
|
|
163
|
+
| **Codex CLI / Copilot** | `.agents` | `.agents/instructions/*.md` | `copilot-instructions.md` |
|
|
153
164
|
| **Antigravity CLI** | `.agents` | `.agents/agents/{name}/agent.json` | `AGENTS.md` |
|
|
154
165
|
| **Grok** | `.grok` | `.grok/agents/*.md` | `GROK.md` |
|
|
155
|
-
| **Local LLM** | `.atabey` | `.atabey/agents/*.md` | `LOCAL_AI.md` |
|
|
166
|
+
| **Local LLM / Ollama** | `.atabey` | `.atabey/agents/*.md` | `LOCAL_AI.md` |
|
|
156
167
|
| **OpenCode** | `.opencode` | `.opencode/agents/*.md` | `OPENCODE.md` |
|
|
157
168
|
|
|
169
|
+
> `atabey init <platform> --unified` configures and mirrors agents across **all platforms simultaneously**.
|
|
170
|
+
|
|
171
|
+
|
|
158
172
|
---
|
|
159
173
|
|
|
160
174
|
## 📋 CLI Reference
|
|
161
175
|
|
|
162
176
|
```bash
|
|
163
177
|
atabey init [adapter] Initialize Atabey (--profile freelancer|team|enterprise)
|
|
164
|
-
atabey mcp start
|
|
165
|
-
atabey
|
|
166
|
-
atabey status Show agent statuses and costs
|
|
178
|
+
atabey mcp start|install MCP server management
|
|
179
|
+
atabey status Show agent statuses and token usage
|
|
167
180
|
atabey check Full health and compliance check
|
|
168
|
-
atabey orchestrate Start orchestration workflow loop
|
|
181
|
+
atabey orchestrate Start the orchestration workflow loop
|
|
169
182
|
atabey approve <traceId> Approve a blocked high-risk task
|
|
170
|
-
atabey hitl answer
|
|
171
|
-
atabey @agent "task" Send task directly to an agent
|
|
183
|
+
atabey hitl status|answer|approve|reject HITL responses & approvals
|
|
172
184
|
atabey trace new|replay <id> Create/replay an execution trace
|
|
173
|
-
atabey
|
|
174
|
-
atabey
|
|
175
|
-
atabey
|
|
176
|
-
atabey
|
|
177
|
-
atabey
|
|
178
|
-
atabey
|
|
185
|
+
atabey plan [submit <json>] Create/submit a task plan
|
|
186
|
+
atabey memory update <sect> <content> Update project memory
|
|
187
|
+
atabey git commit|sync Git operations
|
|
188
|
+
atabey explorer graph|audit Explore / audit the codebase
|
|
189
|
+
atabey knowledge <query> Knowledge base search
|
|
190
|
+
atabey log [@agent] View agent logs
|
|
191
|
+
atabey script <name> [dir] Run a predefined script
|
|
192
|
+
atabey security [path] Run a security audit
|
|
193
|
+
atabey compliance [path] Run a compliance check
|
|
194
|
+
atabey contract verify|update Contract integrity (update re-syncs hash)
|
|
195
|
+
atabey lint Run ESLint
|
|
196
|
+
atabey db <status|migrate|verify|backup|restore> SQLite schema, integrity & backups
|
|
197
|
+
atabey secrets <list|set|get|delete|scan> AES-256-GCM secret vault & leak scan
|
|
198
|
+
atabey api <scan|list|drift|json> API endpoint catalog & contract drift
|
|
199
|
+
atabey audit export|erase Signed audit export / KVKK-GDPR erasure
|
|
200
|
+
atabey worktree <create|list|remove> [name] Isolated agent worktrees
|
|
201
|
+
atabey index [dir] Index the codebase for RAG
|
|
202
|
+
atabey coverage Test coverage reports
|
|
203
|
+
atabey quickstart Generate an example task file
|
|
179
204
|
```
|
|
180
205
|
|
|
181
206
|
### `atabey init [adapter]` Options
|
|
@@ -185,6 +210,7 @@ atabey security [path] Run security audit
|
|
|
185
210
|
| `[adapter]` | `gemini`, `claude`, `cursor`, `grok`, `codex`, `local`, `antigravity-cli`, `opencode` | Target AI platform |
|
|
186
211
|
| `--profile` | `freelancer`, `team`, `enterprise` | Preset agent group layout |
|
|
187
212
|
| `--focus` | `fullstack`, `backend`, `frontend`, `mobile`, `mobile-fullstack` | Project type optimization |
|
|
213
|
+
| `--backend` / `--frontend` / `--native` | `node|go|java|python|dotnet|rust` / `vite|next|vanilla` / `rust|go` | Application-tier scaffolding |
|
|
188
214
|
| `--lang` | `tr`, `en` | Constitution language |
|
|
189
215
|
| `--unified` | Flag | Multi-platform export |
|
|
190
216
|
| `--yes` | Flag | Non-interactive mode |
|
|
@@ -194,58 +220,98 @@ atabey security [path] Run security audit
|
|
|
194
220
|
## 🏗️ Architecture
|
|
195
221
|
|
|
196
222
|
```
|
|
197
|
-
|
|
198
|
-
├──
|
|
199
|
-
│ ├──
|
|
200
|
-
│ ├──
|
|
201
|
-
│
|
|
202
|
-
|
|
203
|
-
├── modules/
|
|
204
|
-
│ ├── agents/
|
|
205
|
-
│ ├──
|
|
206
|
-
│ ├──
|
|
207
|
-
│ ├──
|
|
208
|
-
│ ├──
|
|
209
|
-
│
|
|
210
|
-
├──
|
|
211
|
-
|
|
223
|
+
packages/atabey/
|
|
224
|
+
├── src/
|
|
225
|
+
│ ├── cli/
|
|
226
|
+
│ │ ├── commands/ # 27 CLI commands
|
|
227
|
+
│ │ ├── platforms/ # 8 platform adapters
|
|
228
|
+
│ │ └── utils/ # CLI utilities (compliance, memory, pkg, config)
|
|
229
|
+
│ ├── modules/
|
|
230
|
+
│ │ ├── agents/ # 13 agent definitions + registry
|
|
231
|
+
│ │ ├── audit/ # HMAC-signed audit export
|
|
232
|
+
│ │ ├── contracts/ # Task/API contracts (Zod)
|
|
233
|
+
│ │ ├── engines/ # 9 governance/orchestration engines
|
|
234
|
+
│ │ ├── memory/ # Vector, project, specialty memory
|
|
235
|
+
│ │ ├── providers/ # 8 platform provider adapters
|
|
236
|
+
│ │ ├── runtime/ # Headless CLI runtime, DAG dispatcher, worktrees
|
|
237
|
+
│ │ └── skills/ # 11 core skills
|
|
238
|
+
│ ├── schema/ # JSON schemas
|
|
239
|
+
│ └── shared/ # Audit, storage, PII, logger, constants, types
|
|
212
240
|
└── templates/
|
|
213
241
|
├── prompts/ # 9 prompt recipes
|
|
214
|
-
├── standards/ #
|
|
242
|
+
├── standards/ # 33 governance standards
|
|
215
243
|
└── full/ # Full constitution template
|
|
216
244
|
```
|
|
217
245
|
|
|
218
|
-
|
|
246
|
+
## 5 Core Capabilities
|
|
247
|
+
|
|
248
|
+
| # | Capability | Description |
|
|
249
|
+
|---|-----------|-------------|
|
|
250
|
+
| 🛠️ | **40 MCP Tools** | File system, search, messaging, governance, memory, quality, network, orchestration |
|
|
251
|
+
| 🧠 | **3-Layer Memory** | Vector (TF-IDF/OpenAI), project memory, specialty (agent learning) |
|
|
252
|
+
| 🤖 | **13 Role Profiles** | 3-tier hierarchy (Supreme / Core / Recon) injected into the host LLM |
|
|
253
|
+
| 🎯 | **11 Core Skills** | Platform-adaptive skills for AI coding environments |
|
|
254
|
+
| 📚 | **30+ Standards** | Governance, security, architecture, compliance, deployment |
|
|
219
255
|
|
|
220
|
-
## 🔒 Security & Technical Alignment
|
|
221
256
|
|
|
222
|
-
|
|
257
|
+
## Security & Compliance
|
|
258
|
+
|
|
259
|
+
### Deterministic, fail-closed governance
|
|
260
|
+
- AST-based compliance scanning + strict TypeScript (**`any` is forbidden**, no `console.*` in production code)
|
|
261
|
+
- **Fail-closed PolicyGate** + deny-by-default RBAC permission matrix (protected paths: `.env*`, `.git/`, `.ssh/`, `.atabey/*`, keys)
|
|
262
|
+
- **Prompt-injection protection** (OWASP LLM01) on both input and response
|
|
263
|
+
- **Secret-leak redaction** on tool output + AES-256-GCM local secret vault
|
|
264
|
+
- **HMAC-SHA256** tamper-evident audit chain
|
|
265
|
+
- SSRF-guarded HTTP proxy (private IP / metadata / DNS-rebinding protection)
|
|
266
|
+
- **TLS 1.3 + optional mTLS** on the unified HTTP/SSE transport
|
|
267
|
+
- Human-in-the-Loop: risk score ≥ 60 requires approval
|
|
268
|
+
|
|
269
|
+
### KVKK / GDPR technical alignment
|
|
223
270
|
|
|
224
271
|
| Feature | KVKK | GDPR | Status |
|
|
225
272
|
|---------|------|------|--------|
|
|
226
273
|
| PII Masking (20+ patterns) | Art. 4, 5, 11, 12 | Art. 5, 32 | ✅ |
|
|
227
|
-
| Data Retention (30
|
|
228
|
-
| Right to Erasure | Art. 7 | Art. 17 | ✅ |
|
|
274
|
+
| Data Retention (30–730 days, by category) | Art. 5, 7 | Art. 5, 17 | ✅ |
|
|
275
|
+
| Right to Erasure (`atabey audit erase`) | Art. 7 | Art. 17 | ✅ |
|
|
229
276
|
| Audit Trail | Art. 11 | Art. 30 | ✅ |
|
|
230
277
|
| Data Classification | Art. 6 | Art. 9 | ✅ |
|
|
231
278
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
279
|
+
> Technical compliance tooling — not legal certification. Pair with your DPO / counsel.
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
## Token Efficiency
|
|
283
|
+
|
|
284
|
+
Atabey keeps token consumption low at three layers — **there is no monetary budget layer**:
|
|
285
|
+
|
|
286
|
+
1. **Measurement** — every tool call is counted with the real `cl100k_base` BPE tokenizer (input/output split).
|
|
287
|
+
2. **Limits** — per-provider context / response / per-minute / per-hour and tool-call rate ceilings (`context-optimizer.ts`). A breach sets a cooldown; hard blocking is opt-in via `ATABEY_TOKEN_BUDGET_ENFORCE=true`.
|
|
288
|
+
3. **Savings** — `read_file` responses are smart-truncated (imports/types/signatures preserved), `http_proxy` caches + strips HTML, loop detection stops token-burning loops, and `get_task_context` / `get_symbol_outline` / `get_api_catalog` feed the AI pre-indexed context instead of forcing full-repo scans.
|
|
289
|
+
|
|
290
|
+
Tune limits with `MCP_MAX_TOKENS_PER_MINUTE`, `MCP_MAX_TOKENS_PER_HOUR`, `MCP_MAX_CONTEXT_TOKENS`, `MCP_MAX_FILE_READ_SIZE`.
|
|
291
|
+
|
|
236
292
|
|
|
237
293
|
---
|
|
238
294
|
|
|
239
295
|
## 📦 Dependencies
|
|
240
296
|
|
|
241
|
-
- **atabey-
|
|
242
|
-
-
|
|
243
|
-
- **better-sqlite3**: SQLite database for memory, audit
|
|
297
|
+
- **atabey-shared**: Shared constants, storage, PII masking, audit and locking primitives
|
|
298
|
+
- **atabey-mcp** _(optional)_: MCP server enabling `atabey mcp start` and the HTTP/SSE transport
|
|
299
|
+
- **better-sqlite3**: SQLite database for memory, audit and tasks
|
|
244
300
|
- **zod**: Runtime schema validation
|
|
245
301
|
- **chalk**: Terminal UI styling
|
|
246
|
-
- **
|
|
302
|
+
- **js-yaml**: YAML parsing for the agent-registry validator
|
|
303
|
+
- **typescript**: TypeScript Compiler API for AST compliance scanning
|
|
304
|
+
|
|
305
|
+
## 🔗 Related Packages
|
|
306
|
+
|
|
307
|
+
| Package | Role | Links |
|
|
308
|
+
|---------|------|-------|
|
|
309
|
+
| **atabey** | Core engine — CLI, agents, engines, orchestrator | [npm](https://www.npmjs.com/package/atabey) · [source](https://github.com/ysf-bkr/atabey/tree/main/packages/atabey) |
|
|
310
|
+
| **atabey-mcp** | MCP server — 40 tools & governance pipeline | [npm](https://www.npmjs.com/package/atabey-mcp) · [source](https://github.com/ysf-bkr/atabey/tree/main/packages/atabey-mcp) |
|
|
311
|
+
| **atabey-shared** | Shared utilities — constants, storage, PII, audit, locks | [npm](https://www.npmjs.com/package/atabey-shared) · [source](https://github.com/ysf-bkr/atabey/tree/main/packages/shared) |
|
|
312
|
+
|
|
313
|
+
> Full bilingual documentation (TR + EN): **[github.com/ysf-bkr/atabey](https://github.com/ysf-bkr/atabey#readme)**
|
|
247
314
|
|
|
248
|
-
---
|
|
249
315
|
|
|
250
316
|
## License
|
|
251
317
|
|
|
@@ -4,8 +4,8 @@ import path from "path";
|
|
|
4
4
|
import { logger } from "../../shared/logger.js";
|
|
5
5
|
import { getPackageRoot } from "../utils/pkg.js";
|
|
6
6
|
import { UI } from "../utils/ui.js";
|
|
7
|
-
function parseCoverageSummary() {
|
|
8
|
-
const coverageDir = path.join(
|
|
7
|
+
function parseCoverageSummary(root) {
|
|
8
|
+
const coverageDir = path.join(root, "coverage");
|
|
9
9
|
const summaryPath = path.join(coverageDir, "coverage-summary.json");
|
|
10
10
|
if (!fs.existsSync(summaryPath))
|
|
11
11
|
return null;
|
|
@@ -19,8 +19,8 @@ function parseCoverageSummary() {
|
|
|
19
19
|
return null;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
-
function getFileCoverage() {
|
|
23
|
-
const coverageDir = path.join(
|
|
22
|
+
function getFileCoverage(root) {
|
|
23
|
+
const coverageDir = path.join(root, "coverage");
|
|
24
24
|
const summaryPath = path.join(coverageDir, "coverage-summary.json");
|
|
25
25
|
if (!fs.existsSync(summaryPath))
|
|
26
26
|
return [];
|
|
@@ -31,7 +31,7 @@ function getFileCoverage() {
|
|
|
31
31
|
if (filePath === "total")
|
|
32
32
|
continue;
|
|
33
33
|
const d = data;
|
|
34
|
-
files.push({ file: filePath.replace(
|
|
34
|
+
files.push({ file: filePath.replace(root + "/", ""), stmts: d.statements?.pct ?? 0, branch: d.branches?.pct ?? 0, funcs: d.functions?.pct ?? 0, lines: d.lines?.pct ?? 0, uncovered: [] });
|
|
35
35
|
}
|
|
36
36
|
return files.sort((a, b) => a.lines - b.lines);
|
|
37
37
|
}
|
|
@@ -40,8 +40,8 @@ function getFileCoverage() {
|
|
|
40
40
|
return [];
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
function getThresholdConfig() {
|
|
44
|
-
const vitestConfigPath = path.join(
|
|
43
|
+
function getThresholdConfig(root) {
|
|
44
|
+
const vitestConfigPath = path.join(root, "vitest.config.ts");
|
|
45
45
|
if (!fs.existsSync(vitestConfigPath))
|
|
46
46
|
return { lines: 80, functions: 80, branches: 80, statements: 80 };
|
|
47
47
|
try {
|
|
@@ -75,22 +75,27 @@ function suggestImprovements(lowCoverageFiles) {
|
|
|
75
75
|
}
|
|
76
76
|
export async function coverageCommand() {
|
|
77
77
|
const statusIcon = (current, threshold) => current >= threshold ? "[OK]" : "[LOW]";
|
|
78
|
-
|
|
78
|
+
// Analyze the user's current project (cwd); fall back to the Atabey package
|
|
79
|
+
// only when cwd is not a Node project.
|
|
80
|
+
const projectRoot = fs.existsSync(path.join(process.cwd(), "package.json"))
|
|
81
|
+
? process.cwd()
|
|
82
|
+
: getPackageRoot();
|
|
83
|
+
const coverageDir = path.join(projectRoot, "coverage");
|
|
79
84
|
if (!fs.existsSync(path.join(coverageDir, "coverage-summary.json"))) {
|
|
80
85
|
UI.info("Running tests with coverage...");
|
|
81
86
|
try {
|
|
82
|
-
execSync("npm run test:coverage", { stdio: "inherit", cwd:
|
|
87
|
+
execSync("npm run test:coverage", { stdio: "inherit", cwd: projectRoot });
|
|
83
88
|
}
|
|
84
89
|
catch (err) {
|
|
85
90
|
logger.warn("Coverage run failed (some tests may have failed), continuing with existing coverage data", err);
|
|
86
91
|
}
|
|
87
92
|
}
|
|
88
|
-
const summary = parseCoverageSummary();
|
|
93
|
+
const summary = parseCoverageSummary(projectRoot);
|
|
89
94
|
if (!summary) {
|
|
90
95
|
UI.info("No coverage data found. Run 'npm run test:coverage' first.");
|
|
91
96
|
return;
|
|
92
97
|
}
|
|
93
|
-
const thresholds = getThresholdConfig();
|
|
98
|
+
const thresholds = getThresholdConfig(projectRoot);
|
|
94
99
|
UI.info("Test Coverage Analysis");
|
|
95
100
|
const header = ` ${"Metric".padEnd(13)} | ${"Current".padEnd(7)} | ${"Threshold".padEnd(9)} | Status`;
|
|
96
101
|
const separator = " " + "-".repeat(header.length - 4);
|
|
@@ -100,7 +105,7 @@ export async function coverageCommand() {
|
|
|
100
105
|
const threshold = thresholds[name.toLowerCase()];
|
|
101
106
|
process.stdout.write(` ${name.padEnd(13)} | ${String(val).padStart(7)}% | ${String(threshold).padStart(9)}% | ${statusIcon(val, threshold)}\n`);
|
|
102
107
|
}
|
|
103
|
-
const files = getFileCoverage();
|
|
108
|
+
const files = getFileCoverage(projectRoot);
|
|
104
109
|
const lowCoverageFiles = getLowCoverageFiles(files, thresholds.lines);
|
|
105
110
|
if (lowCoverageFiles.length > 0) {
|
|
106
111
|
UI.info(`Low Coverage Files (below ${thresholds.lines}%):`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../../../src/cli/commands/coverage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAkBpC,SAAS,oBAAoB;
|
|
1
|
+
{"version":3,"file":"coverage.js","sourceRoot":"","sources":["../../../../../src/cli/commands/coverage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,31 @@
|
|
|
1
1
|
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
2
4
|
import { getPackageVersion } from "../utils/pkg.js";
|
|
3
5
|
import { UI } from "../utils/ui.js";
|
|
4
6
|
/**
|
|
5
|
-
* Run ESLint for the project (
|
|
7
|
+
* Run ESLint for the current project (delegates to `npm run lint`).
|
|
8
|
+
* Gives a friendly message when the project has no `lint` script configured.
|
|
6
9
|
*/
|
|
7
10
|
export async function lintCommand() {
|
|
8
11
|
UI.info(`Running ESLint (v${getPackageVersion()})...`);
|
|
9
12
|
const projectRoot = process.cwd();
|
|
13
|
+
let hasLintScript = false;
|
|
14
|
+
try {
|
|
15
|
+
const pkgPath = path.join(projectRoot, "package.json");
|
|
16
|
+
if (fs.existsSync(pkgPath)) {
|
|
17
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
|
|
18
|
+
hasLintScript = Boolean(pkg.scripts?.lint);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
/* treat as no script */
|
|
23
|
+
}
|
|
24
|
+
if (!hasLintScript) {
|
|
25
|
+
UI.error("No \"lint\" script found in this project's package.json.");
|
|
26
|
+
UI.info("Add one (e.g. \"lint\": \"eslint .\") plus an eslint.config.js, then re-run `atabey lint`.");
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
10
29
|
try {
|
|
11
30
|
execSync("npm run lint", {
|
|
12
31
|
cwd: projectRoot,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC
|
|
1
|
+
{"version":3,"file":"lint.js","sourceRoot":"","sources":["../../../../../src/cli/commands/lint.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC7B,EAAE,CAAC,IAAI,CAAC,oBAAoB,iBAAiB,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAElC,IAAI,aAAa,GAAG,KAAK,CAAC;IAC1B,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;QACvD,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAyC,CAAC;YACjG,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACL,wBAAwB;IAC5B,CAAC;IAED,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,EAAE,CAAC,KAAK,CAAC,0DAA0D,CAAC,CAAC;QACrE,EAAE,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,CAAC;QACD,QAAQ,CAAC,cAAc,EAAE;YACrB,GAAG,EAAE,WAAW;YAChB,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE,OAAO,CAAC,GAAG;SACnB,CAAC,CAAC;QACH,EAAE,CAAC,OAAO,CAAC,+BAA+B,CAAC,CAAC;IAChD,CAAC;IAAC,MAAM,CAAC;QACL,EAAE,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACtE,EAAE,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
|
|
@@ -64,29 +64,62 @@ async function startMcpServer() {
|
|
|
64
64
|
: [mcpPath];
|
|
65
65
|
UI.success("MCP Server starting via " + runner + "...");
|
|
66
66
|
logger.info("[MCP] Starting MCP server", { runner, path: mcpPath });
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
67
|
+
const MAX_RESTARTS = 5;
|
|
68
|
+
const STABLE_RUN_THRESHOLD_MS = 30000;
|
|
69
|
+
let restartCount = 0;
|
|
70
|
+
let isShuttingDown = false;
|
|
71
|
+
process.on("SIGINT", () => { isShuttingDown = true; process.exit(0); });
|
|
72
|
+
process.on("SIGTERM", () => { isShuttingDown = true; process.exit(0); });
|
|
73
|
+
function launchInstance() {
|
|
74
|
+
const startTime = Date.now();
|
|
75
|
+
const child = spawn(runner, args, {
|
|
76
|
+
stdio: ["inherit", "inherit", "inherit"],
|
|
77
|
+
env: {
|
|
78
|
+
...process.env,
|
|
79
|
+
ATABEY_PROJECT_ROOT: process.cwd(),
|
|
80
|
+
[MCP.TRANSPORT_ENV]: MCP.TRANSPORT_STDIO,
|
|
81
|
+
ATABEY_AUTO_START_ORCHESTRATOR: "true",
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
child.on("error", (err) => {
|
|
85
|
+
UI.error(`Failed to start MCP Server: ${err.message}`);
|
|
86
|
+
logger.error("[MCP] Failed to start server", err);
|
|
87
|
+
if (!isShuttingDown && restartCount < MAX_RESTARTS) {
|
|
88
|
+
restartCount++;
|
|
89
|
+
UI.warning(`[MCP] Retrying startup in 1s (${restartCount}/${MAX_RESTARTS})...`);
|
|
90
|
+
setTimeout(launchInstance, 1000);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
process.exit(70);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
child.on("exit", (code, signal) => {
|
|
97
|
+
if (isShuttingDown || code === 0 || signal === "SIGINT" || signal === "SIGTERM") {
|
|
98
|
+
process.exit(0);
|
|
99
|
+
}
|
|
100
|
+
const uptime = Date.now() - startTime;
|
|
101
|
+
if (uptime > STABLE_RUN_THRESHOLD_MS) {
|
|
102
|
+
restartCount = 0;
|
|
103
|
+
}
|
|
104
|
+
restartCount++;
|
|
105
|
+
const canRestart = process.env.ATABEY_AUTO_RESTART !== "false" && restartCount <= MAX_RESTARTS;
|
|
106
|
+
if (canRestart) {
|
|
107
|
+
UI.warning(`[MCP] Server crashed (exit code: ${code}). Auto-restarting in 1s (${restartCount}/${MAX_RESTARTS})...`);
|
|
108
|
+
logger.warn("[MCP] Auto-restarting crashed MCP server", { code, restartCount });
|
|
109
|
+
setTimeout(launchInstance, 1000);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
if (restartCount > MAX_RESTARTS) {
|
|
113
|
+
UI.error(`[MCP] Maximum restart attempts (${MAX_RESTARTS}) reached. Aborting.`);
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
UI.error(`MCP Server exited with code ${code}`);
|
|
117
|
+
}
|
|
118
|
+
process.exit(code || 70);
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
launchInstance();
|
|
90
123
|
}
|
|
91
124
|
async function installMcpConfig() {
|
|
92
125
|
process.stdout.write("[MCP] Installing Atabey MCP configuration...\n");
|