@evolith/smart-cli 0.0.1-beta → 0.0.3-beta

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.
Files changed (199) hide show
  1. package/ARCHITECTURE.md +667 -89
  2. package/dist/app.module.js +2 -2
  3. package/dist/app.module.js.map +1 -1
  4. package/dist/app.module.spec.d.ts +1 -0
  5. package/dist/app.module.spec.js +305 -0
  6. package/dist/app.module.spec.js.map +1 -0
  7. package/dist/application/services/index.d.ts +14 -5
  8. package/dist/application/services/index.js +41 -3
  9. package/dist/application/services/index.js.map +1 -1
  10. package/dist/application/services/phase-transition.use-case.spec.d.ts +1 -0
  11. package/dist/application/services/phase-transition.use-case.spec.js +297 -0
  12. package/dist/application/services/phase-transition.use-case.spec.js.map +1 -0
  13. package/dist/commands/adr/adr.command.spec.d.ts +1 -0
  14. package/dist/commands/adr/adr.command.spec.js +409 -0
  15. package/dist/commands/adr/adr.command.spec.js.map +1 -0
  16. package/dist/commands/architecture/scaffold.command.spec.d.ts +1 -0
  17. package/dist/commands/architecture/scaffold.command.spec.js +207 -0
  18. package/dist/commands/architecture/scaffold.command.spec.js.map +1 -0
  19. package/dist/commands/completion/completion.command.spec.d.ts +1 -0
  20. package/dist/commands/completion/completion.command.spec.js +240 -0
  21. package/dist/commands/completion/completion.command.spec.js.map +1 -0
  22. package/dist/commands/docs/docs.command.d.ts +5 -0
  23. package/dist/commands/docs/docs.command.js +159 -3
  24. package/dist/commands/docs/docs.command.js.map +1 -1
  25. package/dist/commands/docs/docs.command.spec.d.ts +1 -0
  26. package/dist/commands/docs/docs.command.spec.js +87 -0
  27. package/dist/commands/docs/docs.command.spec.js.map +1 -0
  28. package/dist/commands/drift/drift.command.d.ts +24 -0
  29. package/dist/commands/drift/drift.command.js +250 -0
  30. package/dist/commands/drift/drift.command.js.map +1 -0
  31. package/dist/commands/drift/drift.command.spec.d.ts +1 -0
  32. package/dist/commands/drift/drift.command.spec.js +327 -0
  33. package/dist/commands/drift/drift.command.spec.js.map +1 -0
  34. package/dist/commands/history/history.command.spec.d.ts +1 -0
  35. package/dist/commands/history/history.command.spec.js +392 -0
  36. package/dist/commands/history/history.command.spec.js.map +1 -0
  37. package/dist/commands/init/agents.command.spec.d.ts +1 -0
  38. package/dist/commands/init/agents.command.spec.js +550 -0
  39. package/dist/commands/init/agents.command.spec.js.map +1 -0
  40. package/dist/commands/init/init.command.spec.d.ts +1 -0
  41. package/dist/commands/init/init.command.spec.js +272 -0
  42. package/dist/commands/init/init.command.spec.js.map +1 -0
  43. package/dist/commands/init/upgrade.command.d.ts +10 -0
  44. package/dist/commands/init/upgrade.command.js +134 -1
  45. package/dist/commands/init/upgrade.command.js.map +1 -1
  46. package/dist/commands/init/upgrade.command.spec.d.ts +1 -0
  47. package/dist/commands/init/upgrade.command.spec.js +378 -0
  48. package/dist/commands/init/upgrade.command.spec.js.map +1 -0
  49. package/dist/commands/mcp/mcp-serve.command.spec.d.ts +1 -0
  50. package/dist/commands/mcp/mcp-serve.command.spec.js +58 -0
  51. package/dist/commands/mcp/mcp-serve.command.spec.js.map +1 -0
  52. package/dist/commands/sdlc/gate-status.command.d.ts +5 -0
  53. package/dist/commands/sdlc/gate-status.command.js +114 -0
  54. package/dist/commands/sdlc/gate-status.command.js.map +1 -0
  55. package/dist/commands/sdlc/generate-domain.command.spec.d.ts +1 -0
  56. package/dist/commands/sdlc/generate-domain.command.spec.js +47 -0
  57. package/dist/commands/sdlc/generate-domain.command.spec.js.map +1 -0
  58. package/dist/commands/sdlc/handoff.command.spec.d.ts +1 -0
  59. package/dist/commands/sdlc/handoff.command.spec.js +395 -0
  60. package/dist/commands/sdlc/handoff.command.spec.js.map +1 -0
  61. package/dist/commands/sdlc/sdlc.command.js +3 -1
  62. package/dist/commands/sdlc/sdlc.command.js.map +1 -1
  63. package/dist/commands/sdlc/sdlc.command.spec.d.ts +1 -0
  64. package/dist/commands/sdlc/sdlc.command.spec.js +45 -0
  65. package/dist/commands/sdlc/sdlc.command.spec.js.map +1 -0
  66. package/dist/commands/standards/standards.command.spec.d.ts +1 -0
  67. package/dist/commands/standards/standards.command.spec.js +311 -0
  68. package/dist/commands/standards/standards.command.spec.js.map +1 -0
  69. package/dist/commands/validate/validate.command.d.ts +4 -0
  70. package/dist/commands/validate/validate.command.js +39 -0
  71. package/dist/commands/validate/validate.command.js.map +1 -1
  72. package/dist/commands/validate/validate.command.spec.d.ts +1 -0
  73. package/dist/commands/validate/validate.command.spec.js +368 -0
  74. package/dist/commands/validate/validate.command.spec.js.map +1 -0
  75. package/dist/core/abstractions/providers/logger.provider.spec.d.ts +1 -0
  76. package/dist/core/abstractions/providers/logger.provider.spec.js +212 -0
  77. package/dist/core/abstractions/providers/logger.provider.spec.js.map +1 -0
  78. package/dist/core/agents/agent-ruleset-builder.d.ts +30 -0
  79. package/dist/core/agents/agent-ruleset-builder.js +75 -0
  80. package/dist/core/agents/agent-ruleset-builder.js.map +1 -0
  81. package/dist/core/agents/agent-ruleset-builder.spec.d.ts +1 -0
  82. package/dist/core/agents/agent-ruleset-builder.spec.js +135 -0
  83. package/dist/core/agents/agent-ruleset-builder.spec.js.map +1 -0
  84. package/dist/core/di/container.spec.js +164 -0
  85. package/dist/core/di/container.spec.js.map +1 -1
  86. package/dist/core/mcp/metrics.service.spec.d.ts +1 -0
  87. package/dist/core/mcp/metrics.service.spec.js +159 -0
  88. package/dist/core/mcp/metrics.service.spec.js.map +1 -0
  89. package/dist/core/mcp/prompts/index.js +36 -0
  90. package/dist/core/mcp/prompts/index.js.map +1 -1
  91. package/dist/core/mcp/prompts/index.spec.d.ts +1 -0
  92. package/dist/core/mcp/prompts/index.spec.js +150 -0
  93. package/dist/core/mcp/prompts/index.spec.js.map +1 -0
  94. package/dist/core/mcp/resources/index.js +16 -0
  95. package/dist/core/mcp/resources/index.js.map +1 -1
  96. package/dist/core/mcp/resources/index.spec.d.ts +1 -0
  97. package/dist/core/mcp/resources/index.spec.js +212 -0
  98. package/dist/core/mcp/resources/index.spec.js.map +1 -0
  99. package/dist/core/mcp/server.d.ts +15 -9
  100. package/dist/core/mcp/server.js +480 -174
  101. package/dist/core/mcp/server.js.map +1 -1
  102. package/dist/core/mcp/server.spec.d.ts +1 -0
  103. package/dist/core/mcp/server.spec.js +563 -0
  104. package/dist/core/mcp/server.spec.js.map +1 -0
  105. package/dist/core/mcp/tools/agent.spec.d.ts +1 -0
  106. package/dist/core/mcp/tools/agent.spec.js +171 -0
  107. package/dist/core/mcp/tools/agent.spec.js.map +1 -0
  108. package/dist/core/mcp/tools/architecture.d.ts +2 -0
  109. package/dist/core/mcp/tools/architecture.js +68 -0
  110. package/dist/core/mcp/tools/architecture.js.map +1 -1
  111. package/dist/core/mcp/tools/architecture.spec.d.ts +1 -0
  112. package/dist/core/mcp/tools/architecture.spec.js +145 -0
  113. package/dist/core/mcp/tools/architecture.spec.js.map +1 -0
  114. package/dist/core/mcp/tools/moscow.d.ts +30 -0
  115. package/dist/core/mcp/tools/moscow.js +113 -0
  116. package/dist/core/mcp/tools/moscow.js.map +1 -0
  117. package/dist/core/mcp/tools/moscow.spec.d.ts +1 -0
  118. package/dist/core/mcp/tools/moscow.spec.js +209 -0
  119. package/dist/core/mcp/tools/moscow.spec.js.map +1 -0
  120. package/dist/core/mcp/tools/sdlc.js +2 -1
  121. package/dist/core/mcp/tools/sdlc.js.map +1 -1
  122. package/dist/core/mcp/tools/sdlc.spec.d.ts +1 -0
  123. package/dist/core/mcp/tools/sdlc.spec.js +170 -0
  124. package/dist/core/mcp/tools/sdlc.spec.js.map +1 -0
  125. package/dist/core/mcp/tools/validate.spec.d.ts +1 -0
  126. package/dist/core/mcp/tools/validate.spec.js +130 -0
  127. package/dist/core/mcp/tools/validate.spec.js.map +1 -0
  128. package/dist/core/mcp/watcher.service.spec.js +109 -8
  129. package/dist/core/mcp/watcher.service.spec.js.map +1 -1
  130. package/dist/core/observability/error-reporter.spec.d.ts +1 -0
  131. package/dist/core/observability/error-reporter.spec.js +291 -0
  132. package/dist/core/observability/error-reporter.spec.js.map +1 -0
  133. package/dist/core/observability/structured-logger.spec.d.ts +1 -0
  134. package/dist/core/observability/structured-logger.spec.js +197 -0
  135. package/dist/core/observability/structured-logger.spec.js.map +1 -0
  136. package/dist/core/observability/timing.spec.d.ts +1 -0
  137. package/dist/core/observability/timing.spec.js +216 -0
  138. package/dist/core/observability/timing.spec.js.map +1 -0
  139. package/dist/core/services/command-history.service.spec.d.ts +1 -0
  140. package/dist/core/services/command-history.service.spec.js +166 -0
  141. package/dist/core/services/command-history.service.spec.js.map +1 -0
  142. package/dist/core/upgrade/satellite-upgrade.service.d.ts +48 -0
  143. package/dist/core/upgrade/satellite-upgrade.service.js +358 -0
  144. package/dist/core/upgrade/satellite-upgrade.service.js.map +1 -0
  145. package/dist/core/upgrade/satellite-upgrade.service.spec.d.ts +1 -0
  146. package/dist/core/upgrade/satellite-upgrade.service.spec.js +163 -0
  147. package/dist/core/upgrade/satellite-upgrade.service.spec.js.map +1 -0
  148. package/dist/core/validators/architecture-drift.service.d.ts +68 -0
  149. package/dist/core/validators/architecture-drift.service.js +266 -0
  150. package/dist/core/validators/architecture-drift.service.js.map +1 -0
  151. package/dist/core/validators/architecture-drift.service.spec.d.ts +1 -0
  152. package/dist/core/validators/architecture-drift.service.spec.js +315 -0
  153. package/dist/core/validators/architecture-drift.service.spec.js.map +1 -0
  154. package/dist/core/validators/deep-architecture-analyzer.d.ts +58 -0
  155. package/dist/core/validators/deep-architecture-analyzer.js +333 -0
  156. package/dist/core/validators/deep-architecture-analyzer.js.map +1 -0
  157. package/dist/core/validators/deep-architecture-analyzer.spec.d.ts +1 -0
  158. package/dist/core/validators/deep-architecture-analyzer.spec.js +216 -0
  159. package/dist/core/validators/deep-architecture-analyzer.spec.js.map +1 -0
  160. package/dist/core/validators/phase-gate-validator.service.d.ts +71 -0
  161. package/dist/core/validators/phase-gate-validator.service.js +273 -0
  162. package/dist/core/validators/phase-gate-validator.service.js.map +1 -0
  163. package/dist/core/validators/phase-gate-validator.service.spec.d.ts +1 -0
  164. package/dist/core/validators/phase-gate-validator.service.spec.js +326 -0
  165. package/dist/core/validators/phase-gate-validator.service.spec.js.map +1 -0
  166. package/dist/core/validators/ruleset-validator-architecture.spec.d.ts +1 -0
  167. package/dist/core/validators/ruleset-validator-architecture.spec.js +178 -0
  168. package/dist/core/validators/ruleset-validator-architecture.spec.js.map +1 -0
  169. package/dist/core/validators/ruleset-validator.service.d.ts +24 -0
  170. package/dist/core/validators/ruleset-validator.service.js +394 -0
  171. package/dist/core/validators/ruleset-validator.service.js.map +1 -1
  172. package/dist/core/validators/ruleset-validator.service.spec.js +351 -3
  173. package/dist/core/validators/ruleset-validator.service.spec.js.map +1 -1
  174. package/dist/domain/services/adr.service.spec.d.ts +1 -0
  175. package/dist/domain/services/adr.service.spec.js +141 -0
  176. package/dist/domain/services/adr.service.spec.js.map +1 -0
  177. package/dist/domain/services/agent-registry.service.spec.d.ts +1 -0
  178. package/dist/domain/services/agent-registry.service.spec.js +162 -0
  179. package/dist/domain/services/agent-registry.service.spec.js.map +1 -0
  180. package/dist/domain/services/index.d.ts +1 -0
  181. package/dist/domain/services/index.js +3 -1
  182. package/dist/domain/services/index.js.map +1 -1
  183. package/dist/domain/services/moscow-prioritization.service.d.ts +44 -0
  184. package/dist/domain/services/moscow-prioritization.service.js +213 -0
  185. package/dist/domain/services/moscow-prioritization.service.js.map +1 -0
  186. package/dist/domain/services/moscow-prioritization.service.spec.d.ts +1 -0
  187. package/dist/domain/services/moscow-prioritization.service.spec.js +285 -0
  188. package/dist/domain/services/moscow-prioritization.service.spec.js.map +1 -0
  189. package/dist/domain/services/standards.service.spec.d.ts +1 -0
  190. package/dist/domain/services/standards.service.spec.js +600 -0
  191. package/dist/domain/services/standards.service.spec.js.map +1 -0
  192. package/dist/domain/services/tool-usage-telemetry.service.spec.d.ts +1 -0
  193. package/dist/domain/services/tool-usage-telemetry.service.spec.js +180 -0
  194. package/dist/domain/services/tool-usage-telemetry.service.spec.js.map +1 -0
  195. package/dist/infrastructure/formatters/output-formatter.service.spec.d.ts +1 -0
  196. package/dist/infrastructure/formatters/output-formatter.service.spec.js +164 -0
  197. package/dist/infrastructure/formatters/output-formatter.service.spec.js.map +1 -0
  198. package/dist/main.js +0 -0
  199. package/package.json +2 -2
package/ARCHITECTURE.md CHANGED
@@ -1,121 +1,699 @@
1
- # Evolith CLI Architecture
2
-
3
- ## Overview
4
-
5
- The Evolith CLI is a NestJS-based command-line application that provides governance, standards validation, and tool selection capabilities for satellite repositories. It follows Clean Architecture principles with clear separation of concerns.
1
+ # Smart CLI Architecture
2
+
3
+ > **Audience:** Developers, Architects, DevOps Engineers
4
+ > **Purpose:** Document the system architecture, components, data models, and flows for the Evolith Smart CLI
5
+ > **Bilingual:** [Español](./ARCHITECTURE.es.md)
6
+
7
+ ---
8
+
9
+ ## Table of Contents
10
+
11
+ 1. [System Overview](#1-system-overview)
12
+ 2. [Component Architecture](#2-component-architecture)
13
+ 3. [Command Flow](#3-command-flow)
14
+ 4. [Data Models](#4-data-models)
15
+ 5. [Phase State Machine](#5-phase-state-machine)
16
+ 6. [Sequence Diagrams](#6-sequence-diagrams)
17
+ 7. [Infrastructure Deployment](#7-infrastructure-deployment)
18
+ 8. [Technical Requirements](#8-technical-requirements)
19
+
20
+ ---
21
+
22
+ ## 1. System Overview
23
+
24
+ ### 1-1 High-Level Architecture
25
+
26
+ ```mermaid
27
+ graph TB
28
+ subgraph CLI["Smart CLI Interface"]
29
+ CLI_User(["👤 User"])
30
+ CLI_Shell["Shell Completion"]
31
+ CLI_History["Command History"]
32
+ end
33
+
34
+ subgraph Commands["Command Layer"]
35
+ CMD_Init["init"]
36
+ CMD_Validate["validate"]
37
+ CMD_ADR["adr"]
38
+ CMD_Agents["agents"]
39
+ CMD_SDLC["sdlc"]
40
+ CMD_MCP["mcp serve"]
41
+ CMD_Standards["standards"]
42
+ CMD_Docs["docs"]
43
+ end
44
+
45
+ subgraph Application["Application Layer"]
46
+ UC_Validate["ValidateSatelliteUseCase"]
47
+ UC_Handoff["HandoffToolUseCase"]
48
+ UC_AgentMgmt["AgentManagementUseCase"]
49
+ end
50
+
51
+ subgraph Domain["Domain Layer"]
52
+ DOM_ADR["ADRService"]
53
+ DOM_Standards["StandardsService"]
54
+ DOM_ToolSel["ToolSelectionService"]
55
+ DOM_SDLC["SDLCService"]
56
+ end
57
+
58
+ subgraph Infrastructure["Infrastructure Layer"]
59
+ INF_Catalog["CatalogLoader"]
60
+ INF_Config["ConfigService"]
61
+ INF_FileMgr["FileManagerService"]
62
+ INF_CLI["CommandExecutor"]
63
+ end
64
+
65
+ subgraph External["External Systems"]
66
+ EXT_NPM["NPM Registry"]
67
+ EXT_GitHub["GitHub API"]
68
+ EXT_MCP["MCP Clients\n(Cursor, Claude)"]
69
+ end
70
+
71
+ CLI_User --> Commands
72
+ Commands --> Application
73
+ Application --> Domain
74
+ Domain --> Infrastructure
75
+ Infrastructure --> External
76
+
77
+ style CLI fill:#1e3a5f,stroke:#3b82f6,color:#fff
78
+ style Commands fill:#065f46,stroke:#10b981,color:#fff
79
+ style Application fill:#4a1d96,stroke:#a855f7,color:#fff
80
+ style Domain fill:#9f1239,stroke:#f43f5e,color:#fff
81
+ style Infrastructure fill:#c2410c,stroke:#f97316,color:#fff
82
+ style External fill:#1e3a5f,stroke:#64748b,color:#fff
83
+ ```
6
84
 
7
- ## Architecture Layers
85
+ ---
86
+
87
+ ## 2. Component Architecture
88
+
89
+ ### 2-1 Clean Architecture Layers
90
+
91
+ ```mermaid
92
+ graph TB
93
+ subgraph Presentation["Presentation Layer<br/>(src/commands/)"]
94
+ P1["init.command.ts"]
95
+ P2["validate.command.ts"]
96
+ P3["adr.command.ts"]
97
+ P4["sdlc.command.ts"]
98
+ P5["mcp-serve.command.ts"]
99
+ P6["agents.command.ts"]
100
+ P7["standards.command.ts"]
101
+ P8["history.command.ts"]
102
+ P9["completion.command.ts"]
103
+ end
104
+
105
+ subgraph UseCases["Application Layer<br/>(src/application/)"]
106
+ U1["ValidateSatelliteUseCase"]
107
+ U2["HandoffToolUseCase"]
108
+ U3["AgentManagementUseCase"]
109
+ end
110
+
111
+ subgraph Services["Domain Layer<br/>(src/domain/services/)"]
112
+ S1["ADRService"]
113
+ S2["StandardsService"]
114
+ S3["ToolSelectionService"]
115
+ S4["PhaseService"]
116
+ end
117
+
118
+ subgraph Entities["Domain Layer<br/>(src/domain/entities/)"]
119
+ E1["Phase"]
120
+ E2["Project"]
121
+ E3["Tool"]
122
+ E4["TransitionResult"]
123
+ E5["GateResult"]
124
+ end
125
+
126
+ subgraph Infra["Infrastructure Layer<br/>(src/infrastructure/)"]
127
+ I1["CatalogLoader"]
128
+ I2["CommandExecutor"]
129
+ I3["OutputFormatter"]
130
+ end
131
+
132
+ subgraph Core["Core Layer<br/>(src/core/)"]
133
+ C1["ConfigService"]
134
+ C2["MCPServerService"]
135
+ C3["WatcherService"]
136
+ C4["StructuredLogger"]
137
+ end
138
+
139
+ Presentation --> UseCases
140
+ UseCases --> Services
141
+ Services --> Entities
142
+ Services --> Infra
143
+ Infra --> Core
144
+
145
+ classDef presentation fill:#1e3a5f,stroke:#3b82f6,color:#fff
146
+ classDef useCases fill:#065f46,stroke:#10b981,color:#fff
147
+ classDef domain fill:#4a1d96,stroke:#a855f7,color:#fff
148
+ classDef infra fill:#9f1239,stroke:#f43f5e,color:#fff
149
+ classDef core fill:#c2410c,stroke:#f97316,color:#fff
150
+
151
+ class P1,P2,P3,P4,P5,P6,P7,P8,P9 presentation
152
+ class U1,U2,U3 useCases
153
+ class S1,S2,S3,S4 domain
154
+ class E1,E2,E3,E4,E5 domain
155
+ class I1,I2,I3 infra
156
+ class C1,C2,C3,C4 core
157
+ ```
8
158
 
159
+ ### 2-2 MCP Server Architecture
160
+
161
+ ```mermaid
162
+ graph TB
163
+ subgraph MCP["MCP Server"]
164
+ MCP_API["MCP SDK\nServer"]
165
+ MCP_Res["Resources\n/evolith/core/info\n/evolith/adrs\n/evolith/standards"]
166
+ MCP_Tools["Tools\nvalidate\nadr-create\nagent-install\nsdlc-handoff"]
167
+ MCP_Prompts["Prompts\nvalidate-repository\nagent-onboarding"]
168
+ MCP_Metrics["Metrics Service"]
169
+ end
170
+
171
+ subgraph Transport["Transport Layer"]
172
+ T_STDIO["stdio (default)"]
173
+ T_HTTP["HTTP (optional)"]
174
+ end
175
+
176
+ subgraph Clients["MCP Clients"]
177
+ C_Cursor["Cursor AI"]
178
+ C_Claude["Claude Desktop"]
179
+ C_Agents["AI Agents"]
180
+ end
181
+
182
+ Clients --> Transport
183
+ Transport --> MCP
184
+ MCP_API --> MCP_Res
185
+ MCP_API --> MCP_Tools
186
+ MCP_API --> MCP_Prompts
187
+ MCP_API --> MCP_Metrics
188
+
189
+ classDef mcp fill:#1e3a5f,stroke:#3b82f6,color:#fff
190
+ classDef transport fill:#065f46,stroke:#10b981,color:#fff
191
+ classDef clients fill:#4a1d96,stroke:#a855f7,color:#fff
192
+
193
+ class MCP_API,MCP_Res,MCP_Tools,MCP_Prompts,MCP_Metrics mcp
194
+ class T_STDIO,T_HTTP transport
195
+ class C_Cursor,C_Claude,C_Agents clients
9
196
  ```
10
- src/
11
- ├── commands/ # Presentation Layer (CLI commands)
12
- ├── application/ # Application Layer (Use Cases)
13
- ├── domain/ # Domain Layer (Entities, Services, Business Rules)
14
- ├── infrastructure/ # Infrastructure Layer (External integrations)
15
- └── core/ # Core Layer (Shared utilities, DI, abstractions)
197
+
198
+ ---
199
+
200
+ ## 3. Command Flow
201
+
202
+ ### 3-1 Command Resolution Flow
203
+
204
+ ```mermaid
205
+ sequenceDiagram
206
+ participant User
207
+ participant CLI as Smart CLI
208
+ participant Parser as Command Parser
209
+ participant Registry as Command Registry
210
+ participant UseCase as Use Case
211
+ participant Domain as Domain Services
212
+ participant Infra as Infrastructure
213
+
214
+ User->>CLI: smart-cli validate --satellite /repo
215
+ CLI->>Parser: parse(args)
216
+ Parser->>Registry: resolve('validate')
217
+ Registry-->>Parser: ValidateCommand
218
+ Parser->>UseCase: execute(options)
219
+ UseCase->>Domain: validateSatellite(config)
220
+ Domain->>Infra: loadCatalog()
221
+ Infra-->>Domain: rulesetCatalog
222
+ Domain->>Domain: checkGates()
223
+ Domain-->>UseCase: validationResult
224
+ UseCase-->>CLI: formattedOutput
225
+ CLI-->>User: table/json/markdown
226
+
227
+ Note over User,Infra: Full validation flow with gate checks
16
228
  ```
17
229
 
18
- ### Presentation Layer (`commands/`)
230
+ ### 3-2 Init Command Flow
231
+
232
+ ```mermaid
233
+ flowchart TB
234
+ A["smart-cli init"] --> B{"Interactive\nor Batch?"}
235
+ B -->|"Interactive"| C["Prompt for:\n- Project name\n- Runtime (NodeJS/.NET/Android)\n- Architecture pattern\n- Monorepo option\n- Agents to install"]
236
+ B -->|"Batch"| D["Read from\nconfig file"]
237
+ C --> E["Create evolith.yaml"]
238
+ D --> E
239
+ E --> F["Create directory structure"]
240
+ F --> G["Install agents"]
241
+ G --> H{"Git init?"}
242
+ H -->|"Yes"| I["Setup git + husky"]
243
+ H -->|"No"| J["Setup complete"]
244
+ I --> J
245
+ J --> K["Generate setup-report.md"]
246
+
247
+ style A fill:#1e3a5f,stroke:#3b82f6,color:#fff
248
+ style K fill:#065f46,stroke:#10b981,color:#fff
249
+ ```
19
250
 
20
- Commands are the entry points that handle user interaction. Each command:
21
- - Extends `CommandRunner` from nest-commander
22
- - Uses `@clack/prompts` for interactive input
23
- - Delegates business logic to application use cases
24
- - Formats output for human or JSON consumption
251
+ ---
252
+
253
+ ## 4. Data Models
254
+
255
+ ### 4-1 Entity Relationship Diagram
256
+
257
+ ```mermaid
258
+ erDiagram
259
+ PROJECT ||--o| PHASE : currentPhase
260
+ PROJECT {
261
+ string id PK
262
+ string name
263
+ string phase
264
+ date createdAt
265
+ ProjectConfigData config
266
+ }
267
+
268
+ PHASE ||--o{ GATE_CHECK : contains
269
+ PHASE {
270
+ string value PK
271
+ string label
272
+ string description
273
+ int order
274
+ string[] artifacts
275
+ }
276
+
277
+ GATE_CHECK ||--o| GATE_RESULT : produces
278
+ GATE_CHECK {
279
+ string id
280
+ string description
281
+ boolean required
282
+ string phaseFK
283
+ }
284
+
285
+ GATE_RESULT {
286
+ string id
287
+ boolean passed
288
+ string description
289
+ boolean required
290
+ string error
291
+ }
292
+
293
+ PROJECT ||--o{ TOOL : uses
294
+ TOOL {
295
+ string id PK
296
+ string name
297
+ string category
298
+ string phase
299
+ boolean isRuntimeAware
300
+ string[] commands
301
+ }
302
+
303
+ TRANSITION_RESULT ||--|| PROJECT : transitions
304
+ TRANSITION_RESULT {
305
+ boolean success
306
+ string fromPhase
307
+ string toPhase
308
+ GateResult[] gateResults
309
+ string[] executedTools
310
+ string[] warnings
311
+ string[] errors
312
+ }
313
+
314
+ ADR ||--o| PROJECT : belongsTo
315
+ ADR {
316
+ string id PK
317
+ string title
318
+ string status
319
+ string author
320
+ date createdAt
321
+ date updatedAt
322
+ }
323
+
324
+ AGENT ||--o{ PROJECT : installedOn
325
+ AGENT {
326
+ string id PK
327
+ string name
328
+ string version
329
+ string template
330
+ date installedAt
331
+ }
332
+ ```
25
333
 
26
- **Commands:**
27
- - `adr/` - ADR management (create, list, get, update, matrix)
28
- - `standards/` - Standards management (init, list, get, validate, export)
29
- - `validate/` - Repository validation against Evolith standards
30
- - `handoff/` - Tool handoff between phases
31
- - `init/` - Repository initialization
334
+ ### 4-2 Project Configuration Schema
335
+
336
+ ```mermaid
337
+ classDiagram
338
+ class ProjectConfigData {
339
+ +string name
340
+ +string runtimeId
341
+ +string monorepoId
342
+ +string architectureId
343
+ +string database
344
+ +string apiProtocol
345
+ +string ciCd
346
+ +string observability
347
+ +string[] tools
348
+ +string[] agents
349
+ }
350
+
351
+ class Runtime {
352
+ +string id
353
+ +string name
354
+ +string version
355
+ +string framework
356
+ }
357
+
358
+ class MonorepoOption {
359
+ +string id
360
+ +string name
361
+ +string description
362
+ }
363
+
364
+ class ArchitecturePattern {
365
+ +string id
366
+ +string name
367
+ +string description
368
+ +string[] layers
369
+ }
370
+
371
+ ProjectConfigData --> Runtime
372
+ ProjectConfigData --> MonorepoOption
373
+ ProjectConfigData --> ArchitecturePattern
374
+ ```
32
375
 
33
- ### Application Layer (`application/use-cases/`)
376
+ ### 4-3 Tool Catalog Schema
377
+
378
+ ```mermaid
379
+ erDiagram
380
+ TOOL_CATALOG ||--|{ TOOL : contains
381
+ TOOL_CATALOG {
382
+ string version
383
+ string lastUpdated
384
+ Tool[] tools
385
+ }
386
+
387
+ TOOL {
388
+ string id
389
+ string name
390
+ string category
391
+ string phase
392
+ boolean isRuntimeAware
393
+ string[] commands
394
+ string platformCheck
395
+ string[] dependencies
396
+ }
397
+
398
+ TOOL ||--o{ RUNTIME_COMPATIBILITY : supports
399
+ RUNTIME_COMPATIBILITY {
400
+ string toolId
401
+ string runtimeId
402
+ string minVersion
403
+ }
404
+ ```
34
405
 
35
- Use cases orchestrate domain services to fulfill specific business operations:
36
- - `ValidateSatelliteUseCase` - Validates satellite repository compliance
37
- - `HandoffToolUseCase` - Manages tool handoff between phases
406
+ ---
38
407
 
39
- ### Domain Layer (`domain/`)
408
+ ## 5. Phase State Machine
40
409
 
41
- Domain services encapsulate business logic:
42
- - `ADRService` - ADR CRUD operations and matrix generation
43
- - `StandardsService` - Standards registration and validation
44
- - `PhaseService` - Phase and tool selection logic
45
- - `ToolSelectionService` - Runtime-aware tool selection
46
- - `PlatformDetectionService` - Runtime environment detection
410
+ ### 5-1 SDLC Phase Transitions
47
411
 
48
- ### Infrastructure Layer (`infrastructure/`)
412
+ ```mermaid
413
+ stateDiagram-v2
414
+ [*] --> Phase0: init
49
415
 
50
- External integrations and platform-specific implementations:
51
- - `cli/` - Command executor and prompt providers
52
- - `catalog/` - JSON catalog loader for runtimes and tools
53
- - `file-system/` - Node.js file system abstraction
416
+ Phase0 --> Phase1: smart-cli sdlc handoff --to phase-1
417
+ Phase1 --> Phase2: smart-cli sdlc handoff --to phase-2
418
+ Phase2 --> Phase3: smart-cli sdlc handoff --to phase-3
419
+ Phase3 --> Phase4: smart-cli sdlc handoff --to phase-4
420
+ Phase4 --> Phase5: smart-cli sdlc handoff --to phase-5
421
+ Phase5 --> [*]: smart-cli sdlc handoff --to production
54
422
 
55
- ### Core Layer (`core/`)
423
+ note right of Phase0
424
+ Discovery & Business Case
425
+ Tools: context-mapper, ballpark
426
+ end note
56
427
 
57
- Shared utilities and framework:
58
- - `abstractions/` - Interfaces for dependency injection
59
- - `interfaces/` - IFileSystem, ILogger, IConfigParser
60
- - `providers/` - Node.js specific implementations
61
- - `di/` - DIContainer for service registration and resolution
62
- - `errors/` - EvolithError base class and error codes
63
- - `observability/` - Structured logging, timing, error reporting
428
+ note right of Phase1
429
+ Architecture & Design
430
+ Tools: ddd-model, architecture-ask
431
+ end note
64
432
 
65
- ## Dependency Injection
433
+ note right of Phase2
434
+ Implementation Scaffolding
435
+ Tools: scaffold, generate-domain
436
+ end note
66
437
 
67
- The `DIContainer` provides service location with singleton/transient scopes:
438
+ note right of Phase3
439
+ Core Development
440
+ Tools: validate, test-runner
441
+ end note
68
442
 
69
- ```typescript
70
- const container = getContainer();
71
- container.registerSingleton('IService', () => new Service());
72
- container.registerTransient('IFactory', () => new Factory());
443
+ note right of Phase4
444
+ Quality Gates
445
+ Tools: security-scan, coverage-check
446
+ end note
73
447
 
74
- const service = container.resolve('IService');
448
+ note right of Phase5
449
+ Observability Setup
450
+ Tools: otel-config, tracing-setup
451
+ end note
75
452
  ```
76
453
 
77
- ## Catalogs
78
-
79
- Runtime and tool selection is driven by JSON catalogs:
454
+ ### 5-2 Gate Check Flow
455
+
456
+ ```mermaid
457
+ flowchart TB
458
+ A["Phase Transition Request"] --> B["Load Gate Checks"]
459
+ B --> C{"All Required\nGates Pass?"}
460
+ C -->|"Yes"| D["Execute Tools"]
461
+ C -->|"No"| E["Show Failures"]
462
+ D --> F["Update Phase"]
463
+ E --> G["Block Transition"]
464
+ F --> H["Generate Handoff Report"]
465
+ G --> I["Exit with Error"]
466
+
467
+ style A fill:#1e3a5f,stroke:#3b82f6,color:#fff
468
+ style F fill:#065f46,stroke:#10b981,color:#fff
469
+ style G fill:#9f1239,stroke:#f43f5e,color:#fff
470
+ ```
80
471
 
81
- - `config/runtimes.json` - Supported runtimes (nodejs, typescript, dotnet, python)
82
- - `config/tool-catalog.json` - Tools grouped by phase (0-5)
83
- - `config/cli-commands-matrix.json` - Command support matrix per runtime
472
+ ---
473
+
474
+ ## 6. Sequence Diagrams
475
+
476
+ ### 6-1 MCP Tool Invocation: validate
477
+
478
+ ```mermaid
479
+ sequenceDiagram
480
+ participant Client as Cursor/Claude
481
+ participant MCP as MCP Server
482
+ participant Tool as ValidateTool
483
+ participant Domain as ValidationService
484
+ participant Infra as FileManager
485
+
486
+ Client->>MCP: callTool('evolith-validate', {path, format})
487
+ MCP->>Tool: execute({path, format})
488
+ Tool->>Domain: validateSatellite(path)
489
+ Domain->>Infra: readFile(evolith.yaml)
490
+ Infra-->>Domain: configContent
491
+ Domain->>Domain: checkCoreRef()
492
+ Domain->>Domain: validateRulesets()
493
+ Domain-->>Tool: ValidationResult
494
+ Tool-->>MCP: {success, rulesChecked, gatesPassed}
495
+ MCP-->>Client: formatted result
496
+ ```
84
497
 
85
- ## Observability
498
+ ### 6-2 Agent Installation Flow
499
+
500
+ ```mermaid
501
+ sequenceDiagram
502
+ participant User
503
+ participant CLI as Smart CLI
504
+ participant UseCase as AgentManagementUseCase
505
+ participant Domain as AgentRegistryService
506
+ participant Infra as FileManager
507
+
508
+ User->>CLI: smart-cli agents install --name @architect
509
+ CLI->>UseCase: execute({name: '@architect'})
510
+ UseCase->>Domain: resolveAgent('@architect')
511
+ Domain-->>UseCase: agentTemplate
512
+ UseCase->>Infra: createAgentStructure(agentTemplate)
513
+ Infra->>Infra: createDirectories()
514
+ Infra->>Infra: writeRuleset()
515
+ Infra->>Infra: updateevolith.yaml()
516
+ Infra-->>UseCase: installationResult
517
+ UseCase-->>CLI: success message
518
+ CLI-->>User: @architect installed successfully
519
+ ```
86
520
 
87
- AOP-based observability with:
88
- - `StructuredLogger` - JSON structured logging with context
89
- - `@Timed` decorator - Operation duration tracking
90
- - `ErrorReporter` - Error aggregation with correlation IDs
91
- - `CommandWatcher` - Command execution telemetry
521
+ ---
522
+
523
+ ## 7. Infrastructure Deployment
524
+
525
+ ### 7-1 Deployment Architecture
526
+
527
+ ```mermaid
528
+ graph TB
529
+ subgraph Development["Development Environment"]
530
+ DEV_User["Developer"]
531
+ DEV_CLI["smart-cli local"]
532
+ end
533
+
534
+ subgraph Installation["Installation Methods"]
535
+ NPM["npm install -g\n@evolith/smart-cli"]
536
+ NPX["npx @evolith/smart-cli"]
537
+ Binary["Download from\nGitHub Releases"]
538
+ Docker["Docker Image\nevolith/smart-cli"]
539
+ end
540
+
541
+ subgraph Runtime["Runtime Context"]
542
+ RT_Config["~/.evolith/config.yaml"]
543
+ RT_Cache["~/.cache/evolith-core"]
544
+ RT_History["Command History\n~/.evolith/history"]
545
+ end
546
+
547
+ subgraph Satellite["Satellite Repository"]
548
+ SAT_Config["evolith.yaml"]
549
+ SAT_Rulesets[".evolith/rulesets"]
550
+ SAT_Hooks[".husky/pre-commit"]
551
+ end
552
+
553
+ DEV_User --> Installation
554
+ NPM --> RT_Config
555
+ NPX --> RT_Config
556
+ Binary --> RT_Config
557
+ Docker --> RT_Config
558
+
559
+ DEV_CLI --> SAT_Config
560
+ RT_Config --> SAT_Config
561
+ RT_Cache --> SAT_Rulesets
562
+ RT_History --> SAT_Hooks
563
+
564
+ classDef dev fill:#1e3a5f,stroke:#3b82f6,color:#fff
565
+ classDef install fill:#065f46,stroke:#10b981,color:#fff
566
+ classDef runtime fill:#4a1d96,stroke:#a855f7,color:#fff
567
+ classDef sat fill:#9f1239,stroke:#f43f5e,color:#fff
568
+
569
+ class DEV_User,DEV_CLI dev
570
+ class NPM,NPX,Binary,Docker install
571
+ class RT_Config,RT_Cache,RT_History runtime
572
+ class SAT_Config,SAT_Rulesets,SAT_Hooks sat
573
+ ```
92
574
 
93
- ## Commands Pattern
575
+ ### 7-2 File System Layout
576
+
577
+ ```mermaid
578
+ graph TB
579
+ subgraph Root["Satellite Repository Root"]
580
+ ROOT["/satellite-repo/"]
581
+ ROOT_YAML["evolith.yaml"]
582
+ ROOT_GIT[".git/"]
583
+ ROOT_HUSKY[".husky/"]
584
+ end
585
+
586
+ subgraph EvolithDir[".evolith/ Directory"]
587
+ E_RULESETS[".evolith/rulesets/"]
588
+ E_AGENTS[".evolith/agents/"]
589
+ E_CACHE[".evolith/cache/"]
590
+ E_STATE[".evolith/state.json"]
591
+ end
592
+
593
+ subgraph Templates["CLI Templates"]
594
+ TMPL_Evolith["evolith.yaml.example"]
595
+ TMPL_Agents["agent-templates/"]
596
+ end
597
+
598
+ ROOT_YAML --> E_RULESETS
599
+ E_RULESETS --> E_AGENTS
600
+ ROOT_HUSKY --> E_STATE
601
+
602
+ style Root fill:#1e3a5f,stroke:#3b82f6,color:#fff
603
+ style EvolithDir fill:#065f46,stroke:#10b981,color:#fff
604
+ style Templates fill:#4a1d96,stroke:#a855f7,color:#fff
605
+ ```
94
606
 
95
- All commands follow the same pattern:
607
+ ---
608
+
609
+ ## 8. Technical Requirements
610
+
611
+ ### 8-1 Runtime Requirements
612
+
613
+ | Requirement | Version | Notes |
614
+ |-------------|---------|-------|
615
+ | Node.js | >= 18.0.0 | LTS recommended |
616
+ | npm | >= 9.0.0 | For global install |
617
+ | Git | >= 2.30 | For git operations |
618
+ | Memory | 512MB min | For MCP server |
619
+ | Disk | 200MB min | For CLI + cache |
620
+
621
+ ### 8-2 Dependencies
622
+
623
+ | Package | Version | Purpose |
624
+ |---------|---------|---------|
625
+ | @nestjs/common | ^11.1.24 | DI & modularity |
626
+ | @nestjs/core | ^11.1.24 | NestJS runtime |
627
+ | nest-commander | ^3.20.1 | CLI framework |
628
+ | @clack/prompts | ^1.5.1 | Interactive UI |
629
+ | @modelcontextprotocol/sdk | ^1.29.0 | MCP protocol |
630
+ | chalk | ^4.1.2 | Colored output |
631
+ | yaml | ^2.9.0 | Config parsing |
632
+ | chokidar | ^5.0.0 | File watching |
633
+ | fs-extra | ^11.3.5 | File operations |
634
+ | ora | ^9.4.0 | Spinners |
635
+
636
+ ### 8-3 Environment Variables
637
+
638
+ | Variable | Default | Purpose |
639
+ |----------|---------|---------|
640
+ | `EVOLITH_CONFIG_PATH` | `~/.evolith` | Config directory |
641
+ | `EVOLITH_LOG_LEVEL` | `info` | Logging level |
642
+ | `EVOLITH_CORE_PATH` | `../evolith` | Core reference |
643
+ | `EVOLITH_PROFILE` | `default` | Config profile |
644
+ | `EVOLITH_NO_CACHE` | `false` | Skip cache |
645
+ | `EVOLITH_FORCE_COLOR` | `auto` | Force colors |
646
+
647
+ ---
648
+
649
+ ## Appendix: Configuration Schema
650
+
651
+ ```yaml
652
+ # evolith.yaml - Satellite Configuration
653
+ apiVersion: evolith.dev/v1
654
+ kind: Satellite
655
+
656
+ coreRef:
657
+ version: "1.0.0"
658
+ path: "../evolith"
659
+
660
+ governance:
661
+ version: "1.0"
662
+ adrRegistry:
663
+ - id: "ADR-0001"
664
+ status: "accepted"
665
+
666
+ product:
667
+ name: "my-project"
668
+ type: "library"
669
+ runtime: "typescript"
670
+
671
+ sdlc:
672
+ currentPhase: "phase-1"
673
+ phaseHistory:
674
+ - phase: "phase-0"
675
+ enteredAt: "2026-01-15T10:00:00Z"
676
+ exitedAt: "2026-01-20T14:30:00Z"
677
+
678
+ agents:
679
+ installed:
680
+ - name: "@architect"
681
+ version: "1.0.0"
682
+ installedAt: "2026-01-15T10:05:00Z"
683
+ ```
96
684
 
97
- 1. Parse options via `@Option` decorators
98
- 2. Show intro with `p.intro()`
99
- 3. Execute business logic via use cases
100
- 4. Format and display results
101
- 5. Show outro with status color (green/yellow/red)
685
+ ---
102
686
 
103
- ## Build and Test
687
+ ## Document Version
104
688
 
105
- ```bash
106
- npm run build # Compile TypeScript
107
- npm run test # Run Jest test suite
108
- npm run lint # ESLint validation
109
- npm run typecheck # TypeScript type checking
110
- ```
689
+ | Version | Date | Author | Changes |
690
+ |---------|------|--------|---------|
691
+ | 1.0.0 | 2026-06-06 | Evolith Team | Initial architecture documentation |
111
692
 
112
- ## Extending the CLI
693
+ ---
113
694
 
114
- To add a new command:
695
+ ## See Also
115
696
 
116
- 1. Create `commands/<feature>/<feature>.command.ts`
117
- 2. Implement `CommandRunner` interface
118
- 3. Add use case in `application/use-cases/`
119
- 4. Register any new domain services
120
- 5. Add tests in `<feature>.command.spec.ts`
121
- 6. Update catalogs if adding new tools/runtimes
697
+ - [MCP Integration Guide](./docs/MCP-INTEGRATION.md)
698
+ - [Command Reference](./docs/planning/cli-command-catalog.md)
699
+ - [ADR-0069: MCP Server Protocol Implementation](../../reference/architecture/adrs/core/0069-mcp-server-protocol-implementation.md)