I sense that a part of the problem with the AI is the objective setting. The AI seems to ignore city hexes and other key historical objectives on the defense. Perhaps this is why it doesn't attack aggressively as well?
It certainly doesn't ignore cities nor key terrain, but it doesn't treat them all the same, not does it cling to ground if it is threatened to be outnumbered, overtaken or even surrounded. I find it performs extremely well for an AI, especially if comparing it to any other strategic AI I have seen so far. Compared to the one in WitP/AE it is quite a bit better (though the former, to defend it, has to deal with even greater complexity as air is treated more explicitly, and the key naval component adds a completely new level which amplifies all logic challenges, even for a human sorting out his next amphibious landing).
It is smart enough to even start evacuating key cities if isolated and attempt a break-out. Often too little too late, but a human player would face the same challenges given how strong Germans tend to be in 41/42, or Russian Rifle Corps post 43/44.
If at all, I found it gives Moscow up a tid bit early (in comparison to what would have likely been the historical course), but to be honest that way
it has at least once in my GC saved a whole lot of Red Army units worth much more than a few city blocks in the long run. So taking into account that neither I and probably also all other players won't play the game in utmost historical fashion (kind of playing as if the own head could get separated from the body if you screw up or needlessly waste your troops), the AI has to in fact diverge as well from historical doctrine and behavior if it is to be competitive with inventive gamers that like employ all available hindsight and experience, perhaps even fight a modern war rather than a world-war where blitz krieg and close air-land cooperation were pretty new and large untried.
If it would stick to historical behavior or strategies, i.e. hold forward too long as a Russian in 41 (along Stalins orders), perform needles counterattacks to open pockets or hurt the Germans, push the Wehrmacht forward in increasingly bloody battles right up to blizzad (instead of digging early), or later not retreat German Divisions from cities once threatened by Russian envelopment (along Hitlers "Feste Punkte" orders), I would bet it would be extremely easy to defeat given today's knowledge.
For the lack of aggression, that clearly changed with the patches. Not sure what they changed, but it may either have to do with the improvements that affected the CV of units (if the attack decision is computed based on relative CV?), or with some kind of threshold they may have tuned up in the AI routines deciding above which odds to attack (or maybe even "pre-simulating" the outcome roughly and deciding on base of average losses?). If you tune the difficulty levels across the board up to >=110% for AI, it gets more aggressive, but not smarter (also with that also chances for it making small pockets seem to improve).
The best experience as Axis player I got so far out of the game (at 110% levels) if I did not start with rail repairs before turn 6, and not use HQ-Build-up before turn 8. I advanced under a lot greater supply strain, much slower which gives AI some extra chance to reorganize after each pocket or breakthru. That caused big headaches in front of Leningrad, or Moscow for me, which, however, felt very much as I would expect it.
In contrast I have tried to test how far Axis under optimal supply conditions and HQ-buildup use could advance prior to December, i.e. test where the supply model would put an inherent stop, but given the low Soviet MP and CV in 41 I succeeded in taking even Stalingrad, Tambov and Murov. I have not played the Soviet side into the late 44 phase when it theoretically should start rushing forward, but I would expect the same to be true. So putting a strain on your supply makes the AI cope much better with the fast movements the phasing player can make.
Certainly an AI could be programmed that would mimic smartness, and could follow "by the book" tactics as much as human could stick to a safe course by the book. And there are also groups today working on "learning algorithms" that for example work by trying to identify key parameters in a set of less important ones for the outcome of processes, but that doesn't sound like anything a game publisher in a niche sector (or even a large studio) could afford. Nor would I be willing to pay a couple of 100 or 1000 dollars for a license, or the 64 node cluster needed to run an AI turn in less than 7 days... As a mathematicians joke would say -- the problem is solvable. Just don't mention the time required...
One cheap way to allow a systematic improvement of AI exists, though: modders, if the routines were written in a sufficiently powerful scripting language and open to modification and enhancement. That I still find would add a lot to 2by3 or Matrix products in general.
For the price of the game, I can only say the they have done a great job with the AI, and I hope that will continue that when a real naval component and a more detailed air war (the closer to WiTP/AE detail levels, the better) will added in the future titles.