@girardelli/architect 5.0.0 → 8.1.0
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/dist/{cli.d.ts → src/adapters/cli.d.ts} +1 -2
- package/dist/{cli.js → src/adapters/cli.js} +191 -213
- package/dist/src/adapters/cli.js.map +1 -0
- package/dist/src/adapters/github-action.d.ts +9 -0
- package/dist/src/adapters/github-action.js +94 -0
- package/dist/src/adapters/github-action.js.map +1 -0
- package/dist/src/adapters/html-reporter/scripts.d.ts +5 -0
- package/dist/src/adapters/html-reporter/scripts.js +400 -0
- package/dist/src/adapters/html-reporter/scripts.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/agents.d.ts +2 -0
- package/dist/src/adapters/html-reporter/sections/agents.js +260 -0
- package/dist/src/adapters/html-reporter/sections/agents.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/anti-patterns.d.ts +13 -0
- package/dist/src/adapters/html-reporter/sections/anti-patterns.js +64 -0
- package/dist/src/adapters/html-reporter/sections/anti-patterns.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/header.d.ts +3 -0
- package/dist/src/adapters/html-reporter/sections/header.js +30 -0
- package/dist/src/adapters/html-reporter/sections/header.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/layers.d.ts +9 -0
- package/dist/src/adapters/html-reporter/sections/layers.js +143 -0
- package/dist/src/adapters/html-reporter/sections/layers.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/overview.d.ts +2 -0
- package/dist/src/adapters/html-reporter/sections/overview.js +58 -0
- package/dist/src/adapters/html-reporter/sections/overview.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/refactoring-plan.d.ts +3 -0
- package/dist/src/adapters/html-reporter/sections/refactoring-plan.js +151 -0
- package/dist/src/adapters/html-reporter/sections/refactoring-plan.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/score.d.ts +7 -0
- package/dist/src/adapters/html-reporter/sections/score.js +70 -0
- package/dist/src/adapters/html-reporter/sections/score.js.map +1 -0
- package/dist/src/adapters/html-reporter/sections/suggestions.d.ts +7 -0
- package/dist/src/adapters/html-reporter/sections/suggestions.js +34 -0
- package/dist/src/adapters/html-reporter/sections/suggestions.js.map +1 -0
- package/dist/src/adapters/html-reporter/styles.d.ts +1 -0
- package/dist/src/adapters/html-reporter/styles.js +526 -0
- package/dist/src/adapters/html-reporter/styles.js.map +1 -0
- package/dist/src/adapters/html-reporter/utils_adapters.d.ts +20 -0
- package/dist/src/adapters/html-reporter/utils_adapters.js +32 -0
- package/dist/src/adapters/html-reporter/utils_adapters.js.map +1 -0
- package/dist/src/adapters/html-reporter/utils_sections.d.ts +7 -0
- package/dist/src/adapters/html-reporter/utils_sections.js +58 -0
- package/dist/src/adapters/html-reporter/utils_sections.js.map +1 -0
- package/dist/src/adapters/html-reporter.d.ts +10 -0
- package/dist/src/adapters/html-reporter.js +97 -0
- package/dist/src/adapters/html-reporter.js.map +1 -0
- package/dist/src/adapters/progress-logger.d.ts +55 -0
- package/dist/src/adapters/progress-logger.js +200 -0
- package/dist/src/adapters/progress-logger.js.map +1 -0
- package/dist/{refactor-reporter.d.ts → src/adapters/refactor-reporter.d.ts} +1 -2
- package/dist/{refactor-reporter.js → src/adapters/refactor-reporter.js} +1 -1
- package/dist/src/adapters/refactor-reporter.js.map +1 -0
- package/dist/{reporter.d.ts → src/adapters/reporter.d.ts} +1 -2
- package/dist/src/adapters/reporter.js.map +1 -0
- package/dist/src/core/GenesisTerminal.d.ts +8 -0
- package/dist/src/core/GenesisTerminal.js +105 -0
- package/dist/src/core/GenesisTerminal.js.map +1 -0
- package/dist/{index.d.ts → src/core/architect.d.ts} +4 -18
- package/dist/{index.js → src/core/architect.js} +22 -21
- package/dist/src/core/architect.js.map +1 -0
- package/dist/tests/architect-adapter-enrichment.test.d.ts +1 -0
- package/dist/tests/architect-adapter-enrichment.test.js +11 -0
- package/dist/tests/architect-adapter-enrichment.test.js.map +1 -0
- package/dist/tests/github-action.test.d.ts +1 -0
- package/dist/tests/github-action.test.js +92 -0
- package/dist/tests/github-action.test.js.map +1 -0
- package/package.json +15 -65
- package/src/adapters/cli.ts +492 -0
- package/src/adapters/github-action.ts +109 -0
- package/src/adapters/html-reporter/scripts.ts +402 -0
- package/src/adapters/html-reporter/sections/agents.ts +267 -0
- package/src/adapters/html-reporter/sections/anti-patterns.ts +81 -0
- package/src/adapters/html-reporter/sections/header.ts +35 -0
- package/src/adapters/html-reporter/sections/layers.ts +165 -0
- package/src/adapters/html-reporter/sections/overview.ts +64 -0
- package/src/adapters/html-reporter/sections/refactoring-plan.ts +166 -0
- package/src/adapters/html-reporter/sections/score.ts +80 -0
- package/src/adapters/html-reporter/sections/suggestions.ts +39 -0
- package/src/adapters/html-reporter/styles.ts +525 -0
- package/src/adapters/html-reporter/utils_adapters.ts +39 -0
- package/src/adapters/html-reporter/utils_sections.ts +55 -0
- package/src/adapters/html-reporter.ts +102 -0
- package/src/adapters/progress-logger.ts +236 -0
- package/src/{refactor-reporter.ts → adapters/refactor-reporter.ts} +2 -2
- package/src/{reporter.ts → adapters/reporter.ts} +1 -1
- package/src/core/GenesisTerminal.ts +127 -0
- package/src/{index.ts → core/architect.ts} +27 -45
- package/tests/github-action.test.ts +109 -0
- package/tsconfig.json +12 -19
- package/CONTRIBUTING.md +0 -140
- package/LICENSE +0 -21
- package/PROJECT_STRUCTURE.txt +0 -168
- package/README.md +0 -257
- package/architect-run.sh +0 -431
- package/assets/banner-v3.html +0 -561
- package/dist/agent-generator/context-enricher.d.ts +0 -58
- package/dist/agent-generator/context-enricher.d.ts.map +0 -1
- package/dist/agent-generator/context-enricher.js +0 -613
- package/dist/agent-generator/context-enricher.js.map +0 -1
- package/dist/agent-generator/domain-inferrer.d.ts +0 -52
- package/dist/agent-generator/domain-inferrer.d.ts.map +0 -1
- package/dist/agent-generator/domain-inferrer.js +0 -585
- package/dist/agent-generator/domain-inferrer.js.map +0 -1
- package/dist/agent-generator/framework-detector.d.ts +0 -40
- package/dist/agent-generator/framework-detector.d.ts.map +0 -1
- package/dist/agent-generator/framework-detector.js +0 -611
- package/dist/agent-generator/framework-detector.js.map +0 -1
- package/dist/agent-generator/index.d.ts +0 -47
- package/dist/agent-generator/index.d.ts.map +0 -1
- package/dist/agent-generator/index.js +0 -545
- package/dist/agent-generator/index.js.map +0 -1
- package/dist/agent-generator/stack-detector.d.ts +0 -14
- package/dist/agent-generator/stack-detector.d.ts.map +0 -1
- package/dist/agent-generator/stack-detector.js +0 -124
- package/dist/agent-generator/stack-detector.js.map +0 -1
- package/dist/agent-generator/templates/core/agents.d.ts +0 -17
- package/dist/agent-generator/templates/core/agents.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/agents.js +0 -1256
- package/dist/agent-generator/templates/core/agents.js.map +0 -1
- package/dist/agent-generator/templates/core/architecture-rules.d.ts +0 -7
- package/dist/agent-generator/templates/core/architecture-rules.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/architecture-rules.js +0 -274
- package/dist/agent-generator/templates/core/architecture-rules.js.map +0 -1
- package/dist/agent-generator/templates/core/general-rules.d.ts +0 -8
- package/dist/agent-generator/templates/core/general-rules.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/general-rules.js +0 -301
- package/dist/agent-generator/templates/core/general-rules.js.map +0 -1
- package/dist/agent-generator/templates/core/hooks-generator.d.ts +0 -21
- package/dist/agent-generator/templates/core/hooks-generator.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/hooks-generator.js +0 -233
- package/dist/agent-generator/templates/core/hooks-generator.js.map +0 -1
- package/dist/agent-generator/templates/core/index-md.d.ts +0 -7
- package/dist/agent-generator/templates/core/index-md.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/index-md.js +0 -246
- package/dist/agent-generator/templates/core/index-md.js.map +0 -1
- package/dist/agent-generator/templates/core/orchestrator.d.ts +0 -8
- package/dist/agent-generator/templates/core/orchestrator.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/orchestrator.js +0 -422
- package/dist/agent-generator/templates/core/orchestrator.js.map +0 -1
- package/dist/agent-generator/templates/core/preflight.d.ts +0 -8
- package/dist/agent-generator/templates/core/preflight.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/preflight.js +0 -213
- package/dist/agent-generator/templates/core/preflight.js.map +0 -1
- package/dist/agent-generator/templates/core/quality-gates.d.ts +0 -11
- package/dist/agent-generator/templates/core/quality-gates.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/quality-gates.js +0 -254
- package/dist/agent-generator/templates/core/quality-gates.js.map +0 -1
- package/dist/agent-generator/templates/core/security-rules.d.ts +0 -7
- package/dist/agent-generator/templates/core/security-rules.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/security-rules.js +0 -528
- package/dist/agent-generator/templates/core/security-rules.js.map +0 -1
- package/dist/agent-generator/templates/core/skills-generator.d.ts +0 -19
- package/dist/agent-generator/templates/core/skills-generator.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/skills-generator.js +0 -546
- package/dist/agent-generator/templates/core/skills-generator.js.map +0 -1
- package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts +0 -7
- package/dist/agent-generator/templates/core/workflow-fix-bug.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/workflow-fix-bug.js +0 -237
- package/dist/agent-generator/templates/core/workflow-fix-bug.js.map +0 -1
- package/dist/agent-generator/templates/core/workflow-new-feature.d.ts +0 -8
- package/dist/agent-generator/templates/core/workflow-new-feature.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/workflow-new-feature.js +0 -321
- package/dist/agent-generator/templates/core/workflow-new-feature.js.map +0 -1
- package/dist/agent-generator/templates/core/workflow-review.d.ts +0 -7
- package/dist/agent-generator/templates/core/workflow-review.d.ts.map +0 -1
- package/dist/agent-generator/templates/core/workflow-review.js +0 -104
- package/dist/agent-generator/templates/core/workflow-review.js.map +0 -1
- package/dist/agent-generator/templates/domain/index.d.ts +0 -22
- package/dist/agent-generator/templates/domain/index.d.ts.map +0 -1
- package/dist/agent-generator/templates/domain/index.js +0 -1176
- package/dist/agent-generator/templates/domain/index.js.map +0 -1
- package/dist/agent-generator/templates/stack/index.d.ts +0 -8
- package/dist/agent-generator/templates/stack/index.d.ts.map +0 -1
- package/dist/agent-generator/templates/stack/index.js +0 -695
- package/dist/agent-generator/templates/stack/index.js.map +0 -1
- package/dist/agent-generator/templates/template-helpers.d.ts +0 -75
- package/dist/agent-generator/templates/template-helpers.d.ts.map +0 -1
- package/dist/agent-generator/templates/template-helpers.js +0 -726
- package/dist/agent-generator/templates/template-helpers.js.map +0 -1
- package/dist/agent-generator/types.d.ts +0 -196
- package/dist/agent-generator/types.d.ts.map +0 -1
- package/dist/agent-generator/types.js +0 -27
- package/dist/agent-generator/types.js.map +0 -1
- package/dist/analyzer.d.ts +0 -38
- package/dist/analyzer.d.ts.map +0 -1
- package/dist/analyzer.js +0 -383
- package/dist/analyzer.js.map +0 -1
- package/dist/analyzers/forecast.d.ts +0 -85
- package/dist/analyzers/forecast.d.ts.map +0 -1
- package/dist/analyzers/forecast.js +0 -337
- package/dist/analyzers/forecast.js.map +0 -1
- package/dist/analyzers/git-cache.d.ts +0 -7
- package/dist/analyzers/git-cache.d.ts.map +0 -1
- package/dist/analyzers/git-cache.js +0 -41
- package/dist/analyzers/git-cache.js.map +0 -1
- package/dist/analyzers/git-history.d.ts +0 -113
- package/dist/analyzers/git-history.d.ts.map +0 -1
- package/dist/analyzers/git-history.js +0 -333
- package/dist/analyzers/git-history.js.map +0 -1
- package/dist/analyzers/index.d.ts +0 -10
- package/dist/analyzers/index.d.ts.map +0 -1
- package/dist/analyzers/index.js +0 -7
- package/dist/analyzers/index.js.map +0 -1
- package/dist/analyzers/temporal-scorer.d.ts +0 -72
- package/dist/analyzers/temporal-scorer.d.ts.map +0 -1
- package/dist/analyzers/temporal-scorer.js +0 -140
- package/dist/analyzers/temporal-scorer.js.map +0 -1
- package/dist/anti-patterns.d.ts +0 -24
- package/dist/anti-patterns.d.ts.map +0 -1
- package/dist/anti-patterns.js +0 -230
- package/dist/anti-patterns.js.map +0 -1
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/config.d.ts +0 -12
- package/dist/config.d.ts.map +0 -1
- package/dist/config.js +0 -110
- package/dist/config.js.map +0 -1
- package/dist/diagram.d.ts +0 -9
- package/dist/diagram.d.ts.map +0 -1
- package/dist/diagram.js +0 -116
- package/dist/diagram.js.map +0 -1
- package/dist/html-reporter.d.ts +0 -47
- package/dist/html-reporter.d.ts.map +0 -1
- package/dist/html-reporter.js +0 -1747
- package/dist/html-reporter.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/project-summarizer.d.ts +0 -38
- package/dist/project-summarizer.d.ts.map +0 -1
- package/dist/project-summarizer.js +0 -463
- package/dist/project-summarizer.js.map +0 -1
- package/dist/refactor-engine.d.ts +0 -18
- package/dist/refactor-engine.d.ts.map +0 -1
- package/dist/refactor-engine.js +0 -86
- package/dist/refactor-engine.js.map +0 -1
- package/dist/refactor-reporter.d.ts.map +0 -1
- package/dist/refactor-reporter.js.map +0 -1
- package/dist/reporter.d.ts.map +0 -1
- package/dist/reporter.js.map +0 -1
- package/dist/rules/barrel-optimizer.d.ts +0 -13
- package/dist/rules/barrel-optimizer.d.ts.map +0 -1
- package/dist/rules/barrel-optimizer.js +0 -77
- package/dist/rules/barrel-optimizer.js.map +0 -1
- package/dist/rules/dead-code-detector.d.ts +0 -21
- package/dist/rules/dead-code-detector.d.ts.map +0 -1
- package/dist/rules/dead-code-detector.js +0 -117
- package/dist/rules/dead-code-detector.js.map +0 -1
- package/dist/rules/hub-splitter.d.ts +0 -13
- package/dist/rules/hub-splitter.d.ts.map +0 -1
- package/dist/rules/hub-splitter.js +0 -110
- package/dist/rules/hub-splitter.js.map +0 -1
- package/dist/rules/import-organizer.d.ts +0 -13
- package/dist/rules/import-organizer.d.ts.map +0 -1
- package/dist/rules/import-organizer.js +0 -85
- package/dist/rules/import-organizer.js.map +0 -1
- package/dist/rules/module-grouper.d.ts +0 -13
- package/dist/rules/module-grouper.d.ts.map +0 -1
- package/dist/rules/module-grouper.js +0 -110
- package/dist/rules/module-grouper.js.map +0 -1
- package/dist/scanner.d.ts +0 -31
- package/dist/scanner.d.ts.map +0 -1
- package/dist/scanner.js +0 -328
- package/dist/scanner.js.map +0 -1
- package/dist/scorer.d.ts +0 -27
- package/dist/scorer.d.ts.map +0 -1
- package/dist/scorer.js +0 -229
- package/dist/scorer.js.map +0 -1
- package/dist/types.d.ts +0 -186
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -2
- package/dist/types.js.map +0 -1
- package/examples/sample-report.md +0 -207
- package/jest.config.js +0 -18
- package/src/agent-generator/context-enricher.ts +0 -672
- package/src/agent-generator/domain-inferrer.ts +0 -635
- package/src/agent-generator/framework-detector.ts +0 -669
- package/src/agent-generator/index.ts +0 -634
- package/src/agent-generator/stack-detector.ts +0 -115
- package/src/agent-generator/templates/core/agents.ts +0 -1296
- package/src/agent-generator/templates/core/architecture-rules.ts +0 -287
- package/src/agent-generator/templates/core/general-rules.ts +0 -306
- package/src/agent-generator/templates/core/hooks-generator.ts +0 -242
- package/src/agent-generator/templates/core/index-md.ts +0 -260
- package/src/agent-generator/templates/core/orchestrator.ts +0 -459
- package/src/agent-generator/templates/core/preflight.ts +0 -215
- package/src/agent-generator/templates/core/quality-gates.ts +0 -256
- package/src/agent-generator/templates/core/security-rules.ts +0 -543
- package/src/agent-generator/templates/core/skills-generator.ts +0 -585
- package/src/agent-generator/templates/core/workflow-fix-bug.ts +0 -239
- package/src/agent-generator/templates/core/workflow-new-feature.ts +0 -323
- package/src/agent-generator/templates/core/workflow-review.ts +0 -106
- package/src/agent-generator/templates/domain/index.ts +0 -1201
- package/src/agent-generator/templates/stack/index.ts +0 -705
- package/src/agent-generator/templates/template-helpers.ts +0 -776
- package/src/agent-generator/types.ts +0 -232
- package/src/analyzer.ts +0 -447
- package/src/analyzers/forecast.ts +0 -496
- package/src/analyzers/git-cache.ts +0 -52
- package/src/analyzers/git-history.ts +0 -488
- package/src/analyzers/index.ts +0 -33
- package/src/analyzers/temporal-scorer.ts +0 -227
- package/src/anti-patterns.ts +0 -287
- package/src/cli.ts +0 -517
- package/src/config.ts +0 -123
- package/src/diagram.ts +0 -144
- package/src/html-reporter.ts +0 -1830
- package/src/project-summarizer.ts +0 -521
- package/src/refactor-engine.ts +0 -117
- package/src/rules/barrel-optimizer.ts +0 -97
- package/src/rules/dead-code-detector.ts +0 -132
- package/src/rules/hub-splitter.ts +0 -123
- package/src/rules/import-organizer.ts +0 -98
- package/src/rules/module-grouper.ts +0 -124
- package/src/scanner.ts +0 -344
- package/src/scorer.ts +0 -254
- package/src/types.ts +0 -193
- package/tests/agent-generator.test.ts +0 -427
- package/tests/analyzers-integration.test.ts +0 -174
- package/tests/anti-patterns.test.ts +0 -94
- package/tests/context-enricher.test.ts +0 -971
- package/tests/fixtures/monorepo/package.json +0 -6
- package/tests/fixtures/monorepo/packages/app/package.json +0 -12
- package/tests/fixtures/monorepo/packages/app/src/index.ts +0 -6
- package/tests/fixtures/monorepo/packages/core/package.json +0 -7
- package/tests/fixtures/monorepo/packages/core/src/index.ts +0 -7
- package/tests/forecast.test.ts +0 -509
- package/tests/framework-detector.test.ts +0 -1172
- package/tests/git-history.test.ts +0 -254
- package/tests/monorepo-scan.test.ts +0 -170
- package/tests/scanner.test.ts +0 -54
- package/tests/scorer.test.ts +0 -674
- package/tests/stack-detector.test.ts +0 -241
- package/tests/template-generation.test.ts +0 -706
- package/tests/template-helpers.test.ts +0 -1152
- package/tests/temporal-scorer.test.ts +0 -307
- /package/dist/{reporter.js → src/adapters/reporter.js} +0 -0
package/README.md
DELETED
|
@@ -1,257 +0,0 @@
|
|
|
1
|
-
# Architect
|
|
2
|
-
|
|
3
|
-
**AI-powered architecture analysis, refactoring, and context-aware agent system generator**
|
|
4
|
-
|
|
5
|
-
[](https://www.typescriptlang.org/)
|
|
6
|
-
[](https://nodejs.org/)
|
|
7
|
-
[](https://www.npmjs.com/package/@girardelli/architect)
|
|
8
|
-
[]()
|
|
9
|
-
[](LICENSE)
|
|
10
|
-
|
|
11
|
-
Understand your codebase architecture in seconds. Detect anti-patterns, get refactoring plans, and generate **context-aware AI agent configurations** that actually understand your stack, domain, and toolchain — all from a single command.
|
|
12
|
-
|
|
13
|
-
## What's New in v3.1
|
|
14
|
-
|
|
15
|
-
- **Context-Aware Agent Generation** — Agents are no longer generic. Templates adapt to your detected stack (Python/FastAPI generates pytest examples, not Jest; Go generates `go test`, not `npm test`)
|
|
16
|
-
- **Framework Detection Engine** — 61 frameworks across 10+ ecosystems detected from dependency files (package.json, pyproject.toml, requirements.txt, pubspec.yaml, go.mod, Cargo.toml, pom.xml, Gemfile, composer.json)
|
|
17
|
-
- **Domain Inference** — Detects business domain (fintech, healthtech, e-commerce, tax, HR, etc.) from project metadata, README, and code structure. Generates domain-specific BDD scenarios, threat models, and compliance requirements (LGPD, PCI-DSS, HIPAA, SOX)
|
|
18
|
-
- **Stack-Aware Templates** — C4 Level 4 code blocks, TDD test examples, ADR decisions, quality gates, and forbidden actions all adapt to the detected language and framework
|
|
19
|
-
- **Skills Generator** — Detects architectural patterns in your codebase (adapters, factories, extractors, repositories) and generates `skills/PROJECT-PATTERNS.md`
|
|
20
|
-
- **Enriched Context** — Module extraction, endpoint detection, toolchain commands, project structure analysis, and critical path identification feed into every generated template
|
|
21
|
-
- **Premium HTML Report** — Dark-themed responsive report with interactive D3.js dependency graph, health radar, bubble charts, and collapsible refactoring steps
|
|
22
|
-
|
|
23
|
-
## Quick Start
|
|
24
|
-
|
|
25
|
-
```bash
|
|
26
|
-
# Run directly with npx (no install needed)
|
|
27
|
-
npx @girardelli/architect analyze ./src
|
|
28
|
-
|
|
29
|
-
# Or install globally
|
|
30
|
-
npm install -g @girardelli/architect
|
|
31
|
-
architect analyze ./src
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
## Core Features
|
|
35
|
-
|
|
36
|
-
### Architecture Analysis
|
|
37
|
-
|
|
38
|
-
Architect scans your codebase and produces a quality score (0-100) with weighted breakdown across four dimensions: Modularity, Coupling, Cohesion, and Layering. It detects anti-patterns (God Class, Circular Dependencies, Leaky Abstractions, Feature Envy, Shotgun Surgery) with severity levels and specific file locations, and automatically identifies architectural layers (API, Service, Data, UI, Infrastructure).
|
|
39
|
-
|
|
40
|
-
The analysis supports TypeScript, JavaScript, Python, Java, Kotlin, Go, Ruby, PHP, Rust, Dart, and SQL. Framework detection covers 61 frameworks across all major ecosystems — from NestJS and React to FastAPI, Spring Boot, Flutter, Gin, Actix Web, and Rails.
|
|
41
|
-
|
|
42
|
-
### Refactoring Plan
|
|
43
|
-
|
|
44
|
-
Each analysis produces a tiered refactoring plan with score impact predictions. Tier 1 contains quick wins (low-risk, immediate impact), Tier 2 covers strategic refactoring with architecture-level benefits. Every step includes before/after score predictions and specific file operations (CREATE, MOVE, MODIFY, DELETE).
|
|
45
|
-
|
|
46
|
-
### Context-Aware Agent System
|
|
47
|
-
|
|
48
|
-
This is what sets Architect apart. The `.agent/` directory it generates isn't a generic template — it's deeply customized to your project.
|
|
49
|
-
|
|
50
|
-
**What gets generated (20+ files):**
|
|
51
|
-
|
|
52
|
-
```
|
|
53
|
-
.agent/
|
|
54
|
-
├── INDEX.md # Project overview with badges and links
|
|
55
|
-
├── agents/
|
|
56
|
-
│ ├── AGENT-ORCHESTRATOR.md # 5-phase protocol, dispatch table, quality gates
|
|
57
|
-
│ ├── {STACK}-BACKEND-DEVELOPER.md # Stack-specific backend agent
|
|
58
|
-
│ ├── {FRAMEWORK}-FRONTEND-DEVELOPER.md
|
|
59
|
-
│ ├── FLUTTER-UI-DEVELOPER.md # (if mobile detected)
|
|
60
|
-
│ ├── DATABASE-ENGINEER.md # (if database detected)
|
|
61
|
-
│ ├── SECURITY-AUDITOR.md # STRIDE threats, compliance, integrations
|
|
62
|
-
│ ├── QA-TEST-ENGINEER.md # Coverage tracking, test scenarios
|
|
63
|
-
│ └── TECH-DEBT-CONTROLLER.md # Score targets, anti-pattern tracking
|
|
64
|
-
├── rules/
|
|
65
|
-
│ ├── 00-general.md # Golden rules, naming, forbidden actions (stack-aware)
|
|
66
|
-
│ ├── 01-architecture.md # Anti-pattern prevention, module structure
|
|
67
|
-
│ ├── 02-security.md # OWASP, secrets, input validation
|
|
68
|
-
│ └── {stack}-rules.md # Stack-specific rules (Python, TypeScript, etc.)
|
|
69
|
-
├── guards/
|
|
70
|
-
│ ├── PREFLIGHT.md # Pre-action checklist with detected toolchain
|
|
71
|
-
│ ├── QUALITY-GATES.md # Build/test/coverage/score gates
|
|
72
|
-
│ └── CODE-REVIEW-CHECKLIST.md # Domain-specific review items
|
|
73
|
-
├── workflows/
|
|
74
|
-
│ ├── new-feature.md # Feature development workflow
|
|
75
|
-
│ ├── fix-bug.md # Bug fix workflow
|
|
76
|
-
│ └── review.md # Code review workflow
|
|
77
|
-
├── templates/
|
|
78
|
-
│ ├── C4.md # Architecture template (framework-aware Level 4)
|
|
79
|
-
│ ├── BDD.md # BDD scenarios (domain-aware)
|
|
80
|
-
│ ├── TDD.md # TDD examples (pytest/junit/go_test/jest per stack)
|
|
81
|
-
│ ├── ADR.md # Decision records (stack-aware context)
|
|
82
|
-
│ └── THREAT-MODEL.md # STRIDE model (domain-specific threats)
|
|
83
|
-
└── skills/
|
|
84
|
-
└── PROJECT-PATTERNS.md # Detected patterns (adapters, factories, etc.)
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
**What makes it context-aware:**
|
|
88
|
-
|
|
89
|
-
A Python/FastAPI project gets pytest examples in TDD, `class ABC` interfaces in C4, SQLAlchemy references in ADR, `type: ignore` in forbidden actions, and `pytest` in quality gates. A TypeScript/NestJS project gets Jest, `interface`, TypeORM/Prisma, `@ts-ignore`, and `npm run build`. A Go project gets `go test`, `type ... interface`, GORM, `interface{}` warnings, and `go build`. The same command produces fundamentally different output based on what it detects.
|
|
90
|
-
|
|
91
|
-
**Domain inference feeds into every template.** A fintech project gets PCI-DSS compliance gates, fraud-prevention BDD scenarios, and encryption-focused threat models. A healthtech project gets HIPAA checks and patient data protection rules. Domain confidence is boosted by reading pyproject.toml descriptions, README keywords, and project names.
|
|
92
|
-
|
|
93
|
-
## CLI Commands
|
|
94
|
-
|
|
95
|
-
### `architect analyze [path]`
|
|
96
|
-
The unified command — architecture analysis, refactoring plan, and agent suggestions in one report.
|
|
97
|
-
|
|
98
|
-
```bash
|
|
99
|
-
architect analyze ./src # HTML report (default)
|
|
100
|
-
architect analyze ./src --output docs/report.html # Custom path
|
|
101
|
-
architect analyze ./src --format json # JSON output
|
|
102
|
-
architect analyze ./src --format markdown # Markdown output
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### `architect agents [path]`
|
|
106
|
-
Generate or audit the `.agent/` directory for AI coding assistants.
|
|
107
|
-
|
|
108
|
-
```bash
|
|
109
|
-
architect agents ./ # Generate full .agent/
|
|
110
|
-
architect agents ./ --agents ORCHESTRATOR,QA # Specific agents only
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
If `.agent/` already exists, Architect audits it and only generates missing files.
|
|
114
|
-
|
|
115
|
-
### `architect refactor [path]`
|
|
116
|
-
Generate a standalone refactoring plan.
|
|
117
|
-
|
|
118
|
-
### `architect score [path]`
|
|
119
|
-
Calculate architecture quality score (quick mode).
|
|
120
|
-
|
|
121
|
-
### `architect anti-patterns [path]`
|
|
122
|
-
Detect anti-patterns with severity levels.
|
|
123
|
-
|
|
124
|
-
### `architect layers [path]`
|
|
125
|
-
Analyze layer structure and distribution.
|
|
126
|
-
|
|
127
|
-
### `architect diagram [path]`
|
|
128
|
-
Generate architecture diagram in Mermaid format.
|
|
129
|
-
|
|
130
|
-
## Configuration
|
|
131
|
-
|
|
132
|
-
Create `.architect.json` in your project root:
|
|
133
|
-
|
|
134
|
-
```json
|
|
135
|
-
{
|
|
136
|
-
"ignore": ["node_modules", "dist", ".git", "coverage", "__pycache__", ".venv"],
|
|
137
|
-
"frameworks": { "detect": true },
|
|
138
|
-
"antiPatterns": {
|
|
139
|
-
"godClass": { "linesThreshold": 500, "methodsThreshold": 10 },
|
|
140
|
-
"shotgunSurgery": { "changePropagationThreshold": 8 }
|
|
141
|
-
},
|
|
142
|
-
"score": {
|
|
143
|
-
"modularity": 0.40,
|
|
144
|
-
"coupling": 0.25,
|
|
145
|
-
"cohesion": 0.20,
|
|
146
|
-
"layering": 0.15
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
```
|
|
150
|
-
|
|
151
|
-
## Supported Frameworks (61)
|
|
152
|
-
|
|
153
|
-
| Ecosystem | Frameworks |
|
|
154
|
-
|-----------|-----------|
|
|
155
|
-
| **Node.js/TypeScript** | NestJS, Express, Fastify, Koa, Hapi, Next.js, Nuxt |
|
|
156
|
-
| **Python** | FastAPI, Django, Flask, Starlette, Sanic, Litestar, aiohttp, Tornado, DRF |
|
|
157
|
-
| **Java/Kotlin** | Spring Boot, Quarkus, Micronaut, Ktor |
|
|
158
|
-
| **Go** | Gin, Echo, Fiber, Chi, Gorilla Mux |
|
|
159
|
-
| **Rust** | Actix Web, Axum, Rocket |
|
|
160
|
-
| **Ruby** | Ruby on Rails, Sinatra |
|
|
161
|
-
| **PHP** | Laravel, Symfony, Slim |
|
|
162
|
-
| **Dart/Flutter** | Flutter, Shelf, Dart Frog |
|
|
163
|
-
| **ORM/Database** | TypeORM, Prisma, Sequelize, Mongoose, Knex, Drizzle, SQLAlchemy, SQLModel, Tortoise ORM, Peewee |
|
|
164
|
-
| **Testing** | Jest, Vitest, Mocha, pytest, unittest, Hypothesis, RSpec |
|
|
165
|
-
| **Tooling** | ESLint, Prettier, Biome, Ruff, Black, Flake8, Pylint, mypy |
|
|
166
|
-
|
|
167
|
-
## CI/CD Integration
|
|
168
|
-
|
|
169
|
-
### GitHub Actions
|
|
170
|
-
|
|
171
|
-
```yaml
|
|
172
|
-
name: Architecture Analysis
|
|
173
|
-
on: [push, pull_request]
|
|
174
|
-
|
|
175
|
-
jobs:
|
|
176
|
-
architect:
|
|
177
|
-
runs-on: ubuntu-latest
|
|
178
|
-
steps:
|
|
179
|
-
- uses: actions/checkout@v4
|
|
180
|
-
- uses: actions/setup-node@v4
|
|
181
|
-
with:
|
|
182
|
-
node-version: '20'
|
|
183
|
-
- run: npx @girardelli/architect analyze ./src --format html --output architect-report.html
|
|
184
|
-
- uses: actions/upload-artifact@v4
|
|
185
|
-
with:
|
|
186
|
-
name: architect-report
|
|
187
|
-
path: architect-report.html
|
|
188
|
-
```
|
|
189
|
-
|
|
190
|
-
### As a Dev Dependency
|
|
191
|
-
|
|
192
|
-
```bash
|
|
193
|
-
npm install -D @girardelli/architect
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
```json
|
|
197
|
-
{
|
|
198
|
-
"scripts": {
|
|
199
|
-
"architect": "architect analyze ./src --output docs/architect-report.html",
|
|
200
|
-
"architect:score": "architect score ./src"
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
```
|
|
204
|
-
|
|
205
|
-
## Programmatic Usage
|
|
206
|
-
|
|
207
|
-
```typescript
|
|
208
|
-
import { Architect, HtmlReportGenerator } from '@girardelli/architect';
|
|
209
|
-
|
|
210
|
-
const architect = new Architect();
|
|
211
|
-
|
|
212
|
-
// Full analysis
|
|
213
|
-
const report = await architect.analyze('./src');
|
|
214
|
-
|
|
215
|
-
// Refactoring plan
|
|
216
|
-
const plan = architect.refactor(report, './src');
|
|
217
|
-
|
|
218
|
-
// Agent suggestions (dry-run)
|
|
219
|
-
const agents = architect.suggestAgents('./');
|
|
220
|
-
|
|
221
|
-
// Generate HTML report
|
|
222
|
-
const htmlGenerator = new HtmlReportGenerator();
|
|
223
|
-
const html = htmlGenerator.generateHtml(report, plan, agents);
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
## Development
|
|
227
|
-
|
|
228
|
-
```bash
|
|
229
|
-
npm install
|
|
230
|
-
npm run build # Compile TypeScript
|
|
231
|
-
npm run dev # Watch mode
|
|
232
|
-
npm test # Run tests (337 tests, 9 suites)
|
|
233
|
-
npm run lint # ESLint
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
## Roadmap
|
|
237
|
-
|
|
238
|
-
- **v4.0** — Agent Runtime: orchestrated execution with I/O contracts, pipeline engine, and human approval gates
|
|
239
|
-
|
|
240
|
-
## Author
|
|
241
|
-
|
|
242
|
-
**Camilo Girardelli**
|
|
243
|
-
IEEE Senior Member | Senior Software Architect | CTO at Girardelli Tecnologia
|
|
244
|
-
|
|
245
|
-
- GitHub: [@camilooscargbaptista](https://github.com/camilooscargbaptista)
|
|
246
|
-
- LinkedIn: [Camilo Girardelli](https://www.linkedin.com/in/camilooscargirardellibaptista/)
|
|
247
|
-
- Company: [Girardelli Tecnologia](https://www.girardellitecnologia.com)
|
|
248
|
-
|
|
249
|
-
## Contributing
|
|
250
|
-
|
|
251
|
-
Contributions are welcome! Please see [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
|
|
252
|
-
|
|
253
|
-
## License
|
|
254
|
-
|
|
255
|
-
MIT License - Copyright (c) 2026 Camilo Girardelli / Girardelli Tecnologia
|
|
256
|
-
|
|
257
|
-
See [LICENSE](LICENSE) for details.
|
package/architect-run.sh
DELETED
|
@@ -1,431 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env bash
|
|
2
|
-
# ╔══════════════════════════════════════════════════════════════════╗
|
|
3
|
-
# ║ 🏗️ Architect v3.0 — Interactive Launcher ║
|
|
4
|
-
# ║ Seleciona projeto via Finder, executa análise completa, ║
|
|
5
|
-
# ║ salva resultados no diretório escolhido. ║
|
|
6
|
-
# ╚══════════════════════════════════════════════════════════════════╝
|
|
7
|
-
|
|
8
|
-
set -euo pipefail
|
|
9
|
-
|
|
10
|
-
# ── Colors ──
|
|
11
|
-
RED='\033[0;31m'
|
|
12
|
-
GREEN='\033[0;32m'
|
|
13
|
-
YELLOW='\033[1;33m'
|
|
14
|
-
BLUE='\033[0;34m'
|
|
15
|
-
CYAN='\033[0;36m'
|
|
16
|
-
BOLD='\033[1m'
|
|
17
|
-
DIM='\033[2m'
|
|
18
|
-
NC='\033[0m' # No Color
|
|
19
|
-
|
|
20
|
-
# ── Script location (resolve symlinks) ──
|
|
21
|
-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
22
|
-
ARCHITECT_BIN="${SCRIPT_DIR}/dist/cli.js"
|
|
23
|
-
|
|
24
|
-
# ── Helpers ──
|
|
25
|
-
|
|
26
|
-
print_banner() {
|
|
27
|
-
local GRAY='\033[38;5;240m'
|
|
28
|
-
local WHITE='\033[38;5;255m'
|
|
29
|
-
local MAGENTA='\033[38;5;201m'
|
|
30
|
-
echo ""
|
|
31
|
-
echo -e "${GRAY} ┌─────────────────────────────────────────────────────────────────┐${NC}"
|
|
32
|
-
echo -e "${GRAY} │${NC} ${GRAY}│${NC}"
|
|
33
|
-
echo -e "${GRAY} │${NC} ${CYAN}${BOLD}⚡ ARCHITECT v3.0${NC} ${DIM}Enterprise Architecture Intelligence${NC} ${GRAY}│${NC}"
|
|
34
|
-
echo -e "${GRAY} │${NC} ${DIM}@girardelli/architect — powered by Girardelli Tecnologia${NC} ${GRAY}│${NC}"
|
|
35
|
-
echo -e "${GRAY} │${NC} ${GRAY}│${NC}"
|
|
36
|
-
echo -e "${GRAY} └─────────────────────────────────────────────────────────────────┘${NC}"
|
|
37
|
-
echo ""
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
print_step() {
|
|
41
|
-
echo -e "\n${BLUE}▸${NC} ${BOLD}$1${NC}"
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
print_success() {
|
|
45
|
-
echo -e " ${GREEN}✅ $1${NC}"
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
print_warn() {
|
|
49
|
-
echo -e " ${YELLOW}⚠️ $1${NC}"
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
print_error() {
|
|
53
|
-
echo -e " ${RED}❌ $1${NC}"
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
print_info() {
|
|
57
|
-
echo -e " ${DIM}$1${NC}"
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
# ── OS Detection ──
|
|
61
|
-
|
|
62
|
-
detect_os() {
|
|
63
|
-
case "$(uname -s)" in
|
|
64
|
-
Darwin*) echo "macos" ;;
|
|
65
|
-
Linux*) echo "linux" ;;
|
|
66
|
-
MINGW*|MSYS*|CYGWIN*) echo "windows" ;;
|
|
67
|
-
*) echo "unknown" ;;
|
|
68
|
-
esac
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
OS=$(detect_os)
|
|
72
|
-
|
|
73
|
-
# ── Folder Picker ──
|
|
74
|
-
|
|
75
|
-
pick_folder() {
|
|
76
|
-
local prompt="$1"
|
|
77
|
-
local default_path="${2:-$HOME}"
|
|
78
|
-
local result=""
|
|
79
|
-
|
|
80
|
-
case "$OS" in
|
|
81
|
-
macos)
|
|
82
|
-
result=$(osascript -e "
|
|
83
|
-
set selectedFolder to choose folder with prompt \"$prompt\" default location POSIX file \"$default_path\"
|
|
84
|
-
return POSIX path of selectedFolder
|
|
85
|
-
" 2>/dev/null) || true
|
|
86
|
-
;;
|
|
87
|
-
linux)
|
|
88
|
-
# Try zenity first (GNOME), then kdialog (KDE), then terminal fallback
|
|
89
|
-
if command -v zenity &>/dev/null; then
|
|
90
|
-
result=$(zenity --file-selection --directory --title="$prompt" 2>/dev/null) || true
|
|
91
|
-
elif command -v kdialog &>/dev/null; then
|
|
92
|
-
result=$(kdialog --getexistingdirectory "$default_path" --title "$prompt" 2>/dev/null) || true
|
|
93
|
-
fi
|
|
94
|
-
;;
|
|
95
|
-
windows)
|
|
96
|
-
# PowerShell folder picker
|
|
97
|
-
result=$(powershell.exe -Command "
|
|
98
|
-
Add-Type -AssemblyName System.Windows.Forms
|
|
99
|
-
\$dialog = New-Object System.Windows.Forms.FolderBrowserDialog
|
|
100
|
-
\$dialog.Description = '$prompt'
|
|
101
|
-
\$dialog.SelectedPath = '$default_path'
|
|
102
|
-
if (\$dialog.ShowDialog() -eq 'OK') { \$dialog.SelectedPath }
|
|
103
|
-
" 2>/dev/null | tr -d '\r') || true
|
|
104
|
-
;;
|
|
105
|
-
esac
|
|
106
|
-
|
|
107
|
-
# Fallback: terminal input
|
|
108
|
-
if [ -z "$result" ]; then
|
|
109
|
-
echo "" >&2
|
|
110
|
-
echo -e " ${YELLOW}Não foi possível abrir o seletor de pasta.${NC}" >&2
|
|
111
|
-
echo -e " ${DIM}Digite o caminho manualmente:${NC}" >&2
|
|
112
|
-
read -rp " > " result </dev/tty
|
|
113
|
-
fi
|
|
114
|
-
|
|
115
|
-
# Remove trailing slash
|
|
116
|
-
echo "${result%/}"
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
# ── Menu de Análise ──
|
|
120
|
-
|
|
121
|
-
show_analysis_menu() {
|
|
122
|
-
echo "" >&2
|
|
123
|
-
echo -e "${BOLD}Selecione as análises a executar:${NC}" >&2
|
|
124
|
-
echo "" >&2
|
|
125
|
-
echo -e " ${CYAN}1)${NC} 🔍 Análise completa ${DIM}(report HTML + refactor plan + agents)${NC}" >&2
|
|
126
|
-
echo -e " ${CYAN}2)${NC} 📊 Apenas score ${DIM}(score rápido com breakdown)${NC}" >&2
|
|
127
|
-
echo -e " ${CYAN}3)${NC} 🐛 Anti-patterns ${DIM}(detectar problemas arquiteturais)${NC}" >&2
|
|
128
|
-
echo -e " ${CYAN}4)${NC} 🤖 Gerar .agent/ ${DIM}(framework de agentes Enterprise-Grade)${NC}" >&2
|
|
129
|
-
echo -e " ${CYAN}5)${NC} 🔧 Plano de refatoração ${DIM}(steps + operations + score estimado)${NC}" >&2
|
|
130
|
-
echo -e " ${CYAN}6)${NC} 🗺️ Diagrama Mermaid ${DIM}(grafo de dependências)${NC}" >&2
|
|
131
|
-
echo -e " ${CYAN}7)${NC} 🚀 TUDO ${DIM}(roda todas as análises acima)${NC}" >&2
|
|
132
|
-
echo "" >&2
|
|
133
|
-
read -rp " Opção [1-7] (default: 1): " choice </dev/tty
|
|
134
|
-
echo "${choice:-1}"
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
# ── Validações ──
|
|
138
|
-
|
|
139
|
-
check_prerequisites() {
|
|
140
|
-
print_step "Verificando pré-requisitos..."
|
|
141
|
-
|
|
142
|
-
# Node.js
|
|
143
|
-
if ! command -v node &>/dev/null; then
|
|
144
|
-
print_error "Node.js não encontrado. Instale: https://nodejs.org"
|
|
145
|
-
exit 1
|
|
146
|
-
fi
|
|
147
|
-
local node_version
|
|
148
|
-
node_version=$(node -v | sed 's/v//' | cut -d. -f1)
|
|
149
|
-
if [ "$node_version" -lt 18 ]; then
|
|
150
|
-
print_error "Node.js >= 18 necessário. Atual: $(node -v)"
|
|
151
|
-
exit 1
|
|
152
|
-
fi
|
|
153
|
-
print_success "Node.js $(node -v)"
|
|
154
|
-
|
|
155
|
-
# Dependencies installed?
|
|
156
|
-
if [ ! -d "${SCRIPT_DIR}/node_modules" ]; then
|
|
157
|
-
print_warn "Dependências não instaladas. Instalando agora..."
|
|
158
|
-
(cd "$SCRIPT_DIR" && npm install --silent)
|
|
159
|
-
if [ $? -ne 0 ]; then
|
|
160
|
-
print_error "Falha ao instalar dependências. Rode: cd $SCRIPT_DIR && npm install"
|
|
161
|
-
exit 1
|
|
162
|
-
fi
|
|
163
|
-
print_success "Dependências instaladas"
|
|
164
|
-
fi
|
|
165
|
-
|
|
166
|
-
# Architect built?
|
|
167
|
-
if [ ! -f "$ARCHITECT_BIN" ]; then
|
|
168
|
-
print_warn "Architect não compilado. Compilando agora..."
|
|
169
|
-
(cd "$SCRIPT_DIR" && npm run build)
|
|
170
|
-
if [ ! -f "$ARCHITECT_BIN" ]; then
|
|
171
|
-
print_error "Falha ao compilar. Rode: cd $SCRIPT_DIR && npm run build"
|
|
172
|
-
exit 1
|
|
173
|
-
fi
|
|
174
|
-
print_success "Build concluído"
|
|
175
|
-
else
|
|
176
|
-
print_success "Architect compilado"
|
|
177
|
-
fi
|
|
178
|
-
|
|
179
|
-
# Register CLI globally (npm link) if 'architect' not in PATH
|
|
180
|
-
if ! command -v architect &>/dev/null; then
|
|
181
|
-
print_warn "Comando 'architect' não encontrado no PATH. Registrando via npm link..."
|
|
182
|
-
(cd "$SCRIPT_DIR" && npm link --silent 2>/dev/null) || true
|
|
183
|
-
if command -v architect &>/dev/null; then
|
|
184
|
-
print_success "Comando 'architect' disponível globalmente"
|
|
185
|
-
else
|
|
186
|
-
print_info "npm link falhou (talvez precise de sudo). Use: npx architect ou ./architect-run.sh"
|
|
187
|
-
fi
|
|
188
|
-
else
|
|
189
|
-
print_success "Comando 'architect' disponível"
|
|
190
|
-
fi
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
# ── Execução das Análises ──
|
|
194
|
-
|
|
195
|
-
run_analyze() {
|
|
196
|
-
local project="$1"
|
|
197
|
-
local output_dir="$2"
|
|
198
|
-
local project_name
|
|
199
|
-
project_name=$(basename "$project")
|
|
200
|
-
|
|
201
|
-
print_step "Executando análise completa de ${BOLD}${project_name}${NC}..."
|
|
202
|
-
node "$ARCHITECT_BIN" analyze "$project" \
|
|
203
|
-
--format html \
|
|
204
|
-
--output "${output_dir}/architect-report-${project_name}.html"
|
|
205
|
-
print_success "Report HTML: ${output_dir}/architect-report-${project_name}.html"
|
|
206
|
-
}
|
|
207
|
-
|
|
208
|
-
run_score() {
|
|
209
|
-
local project="$1"
|
|
210
|
-
local output_dir="$2"
|
|
211
|
-
local project_name
|
|
212
|
-
project_name=$(basename "$project")
|
|
213
|
-
|
|
214
|
-
print_step "Calculando score de ${BOLD}${project_name}${NC}..."
|
|
215
|
-
node "$ARCHITECT_BIN" score "$project" --format json \
|
|
216
|
-
> "${output_dir}/architect-score-${project_name}.json"
|
|
217
|
-
|
|
218
|
-
# Print inline score
|
|
219
|
-
local score
|
|
220
|
-
score=$(node -e "const s = require('${output_dir}/architect-score-${project_name}.json'); console.log(s.overall + '/100 — M:' + s.breakdown.modularity + ' C:' + s.breakdown.coupling + ' Co:' + s.breakdown.cohesion + ' L:' + s.breakdown.layering)" 2>/dev/null || echo "ver JSON")
|
|
221
|
-
print_success "Score: ${score}"
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
run_anti_patterns() {
|
|
225
|
-
local project="$1"
|
|
226
|
-
local output_dir="$2"
|
|
227
|
-
local project_name
|
|
228
|
-
project_name=$(basename "$project")
|
|
229
|
-
|
|
230
|
-
print_step "Detectando anti-patterns em ${BOLD}${project_name}${NC}..."
|
|
231
|
-
node "$ARCHITECT_BIN" anti-patterns "$project" --format json \
|
|
232
|
-
> "${output_dir}/architect-antipatterns-${project_name}.json"
|
|
233
|
-
|
|
234
|
-
local count
|
|
235
|
-
count=$(node -e "const d = require('${output_dir}/architect-antipatterns-${project_name}.json'); console.log(d.length)" 2>/dev/null || echo "?")
|
|
236
|
-
print_success "Anti-patterns encontrados: ${count}"
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
run_agents() {
|
|
240
|
-
local project="$1"
|
|
241
|
-
local output_dir="$2"
|
|
242
|
-
local project_name
|
|
243
|
-
project_name=$(basename "$project")
|
|
244
|
-
|
|
245
|
-
print_step "Gerando framework de agentes (.agent/) para ${BOLD}${project_name}${NC}..."
|
|
246
|
-
|
|
247
|
-
# Generate agents in the project directory (standard location)
|
|
248
|
-
node "$ARCHITECT_BIN" agents "$project"
|
|
249
|
-
|
|
250
|
-
# Also copy to output dir if different
|
|
251
|
-
if [ -d "${project}/.agent" ] && [ "$project" != "$output_dir" ]; then
|
|
252
|
-
cp -r "${project}/.agent" "${output_dir}/.agent-${project_name}" 2>/dev/null || true
|
|
253
|
-
print_success ".agent/ gerado no projeto E copiado para output"
|
|
254
|
-
else
|
|
255
|
-
print_success ".agent/ gerado no projeto"
|
|
256
|
-
fi
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
run_refactor() {
|
|
260
|
-
local project="$1"
|
|
261
|
-
local output_dir="$2"
|
|
262
|
-
local project_name
|
|
263
|
-
project_name=$(basename "$project")
|
|
264
|
-
|
|
265
|
-
print_step "Gerando plano de refatoração para ${BOLD}${project_name}${NC}..."
|
|
266
|
-
node "$ARCHITECT_BIN" refactor "$project" \
|
|
267
|
-
--output "${output_dir}/architect-refactor-${project_name}.html"
|
|
268
|
-
print_success "Refactor plan: ${output_dir}/architect-refactor-${project_name}.html"
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
run_diagram() {
|
|
272
|
-
local project="$1"
|
|
273
|
-
local output_dir="$2"
|
|
274
|
-
local project_name
|
|
275
|
-
project_name=$(basename "$project")
|
|
276
|
-
|
|
277
|
-
print_step "Gerando diagrama Mermaid de ${BOLD}${project_name}${NC}..."
|
|
278
|
-
node "$ARCHITECT_BIN" diagram "$project" \
|
|
279
|
-
--output "${output_dir}/architect-diagram-${project_name}.mmd"
|
|
280
|
-
print_success "Diagrama: ${output_dir}/architect-diagram-${project_name}.mmd"
|
|
281
|
-
}
|
|
282
|
-
|
|
283
|
-
# ── Open Results ──
|
|
284
|
-
|
|
285
|
-
open_results() {
|
|
286
|
-
local output_dir="$1"
|
|
287
|
-
|
|
288
|
-
echo ""
|
|
289
|
-
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
|
|
290
|
-
echo -e " ${BOLD}✅ Análise concluída!${NC}"
|
|
291
|
-
echo -e "${GREEN}═══════════════════════════════════════════════════════════${NC}"
|
|
292
|
-
echo ""
|
|
293
|
-
echo -e " ${DIM}Resultados salvos em:${NC}"
|
|
294
|
-
echo -e " ${BOLD}${output_dir}${NC}"
|
|
295
|
-
echo ""
|
|
296
|
-
|
|
297
|
-
# List generated files
|
|
298
|
-
echo -e " ${DIM}Arquivos gerados:${NC}"
|
|
299
|
-
for f in "${output_dir}"/architect-*; do
|
|
300
|
-
[ -e "$f" ] && echo -e " ${CYAN}📄${NC} $(basename "$f")"
|
|
301
|
-
done
|
|
302
|
-
if [ -d "${output_dir}/.agent"* ] 2>/dev/null; then
|
|
303
|
-
echo -e " ${CYAN}📁${NC} .agent/ (framework de agentes)"
|
|
304
|
-
fi
|
|
305
|
-
|
|
306
|
-
echo ""
|
|
307
|
-
read -rp " Abrir pasta de resultados? [S/n]: " open_choice </dev/tty
|
|
308
|
-
open_choice="${open_choice:-S}"
|
|
309
|
-
|
|
310
|
-
if [[ "$open_choice" =~ ^[Ss]$ ]]; then
|
|
311
|
-
case "$OS" in
|
|
312
|
-
macos) open "$output_dir" ;;
|
|
313
|
-
linux) xdg-open "$output_dir" 2>/dev/null || true ;;
|
|
314
|
-
windows) explorer.exe "$output_dir" 2>/dev/null || true ;;
|
|
315
|
-
esac
|
|
316
|
-
fi
|
|
317
|
-
|
|
318
|
-
# Try to open HTML report
|
|
319
|
-
local html_report
|
|
320
|
-
html_report=$(find "$output_dir" -name "architect-report-*.html" -maxdepth 1 2>/dev/null | head -1)
|
|
321
|
-
if [ -n "$html_report" ]; then
|
|
322
|
-
read -rp " Abrir report HTML no browser? [S/n]: " browser_choice </dev/tty
|
|
323
|
-
browser_choice="${browser_choice:-S}"
|
|
324
|
-
if [[ "$browser_choice" =~ ^[Ss]$ ]]; then
|
|
325
|
-
case "$OS" in
|
|
326
|
-
macos) open "$html_report" ;;
|
|
327
|
-
linux) xdg-open "$html_report" 2>/dev/null || true ;;
|
|
328
|
-
windows) start "$html_report" 2>/dev/null || true ;;
|
|
329
|
-
esac
|
|
330
|
-
fi
|
|
331
|
-
fi
|
|
332
|
-
}
|
|
333
|
-
|
|
334
|
-
# ── Main ──
|
|
335
|
-
|
|
336
|
-
main() {
|
|
337
|
-
print_banner
|
|
338
|
-
check_prerequisites
|
|
339
|
-
|
|
340
|
-
# ── Step 1: Select project ──
|
|
341
|
-
print_step "Selecione o projeto para analisar"
|
|
342
|
-
print_info "Uma janela do Finder/Explorer será aberta..."
|
|
343
|
-
|
|
344
|
-
PROJECT_PATH=$(pick_folder "🏗️ Architect — Selecione o PROJETO para analisar" "$HOME")
|
|
345
|
-
|
|
346
|
-
if [ -z "$PROJECT_PATH" ] || [ ! -d "$PROJECT_PATH" ]; then
|
|
347
|
-
print_error "Nenhum projeto selecionado ou diretório inválido."
|
|
348
|
-
exit 1
|
|
349
|
-
fi
|
|
350
|
-
print_success "Projeto: ${PROJECT_PATH}"
|
|
351
|
-
|
|
352
|
-
# Quick validation — does it look like a code project?
|
|
353
|
-
local file_count
|
|
354
|
-
file_count=$(find "$PROJECT_PATH" -maxdepth 3 -type f \( -name "*.ts" -o -name "*.js" -o -name "*.py" -o -name "*.dart" -o -name "*.go" -o -name "*.java" -o -name "*.rs" -o -name "*.rb" -o -name "*.php" -o -name "*.cs" \) 2>/dev/null | wc -l | tr -d ' ') || file_count=0
|
|
355
|
-
if [ "$file_count" -eq 0 ]; then
|
|
356
|
-
print_warn "Nenhum arquivo de código encontrado nas primeiras 3 camadas."
|
|
357
|
-
read -rp " Continuar mesmo assim? [s/N]: " continue_choice </dev/tty
|
|
358
|
-
if [[ ! "$continue_choice" =~ ^[Ss]$ ]]; then
|
|
359
|
-
echo " Abortado."
|
|
360
|
-
exit 0
|
|
361
|
-
fi
|
|
362
|
-
else
|
|
363
|
-
print_info "Encontrados ${file_count} arquivos de código"
|
|
364
|
-
fi
|
|
365
|
-
|
|
366
|
-
# ── Step 2: Select output directory ──
|
|
367
|
-
print_step "Selecione onde salvar os resultados"
|
|
368
|
-
print_info "Uma janela do Finder/Explorer será aberta..."
|
|
369
|
-
|
|
370
|
-
OUTPUT_PATH=$(pick_folder "🏗️ Architect — Selecione DESTINO dos resultados" "$HOME/Documents")
|
|
371
|
-
|
|
372
|
-
if [ -z "$OUTPUT_PATH" ]; then
|
|
373
|
-
# Default: create output dir next to project
|
|
374
|
-
OUTPUT_PATH="${PROJECT_PATH}/architect-results"
|
|
375
|
-
print_warn "Nenhum destino selecionado. Usando: ${OUTPUT_PATH}"
|
|
376
|
-
fi
|
|
377
|
-
|
|
378
|
-
# Create output dir if needed
|
|
379
|
-
mkdir -p "$OUTPUT_PATH"
|
|
380
|
-
print_success "Destino: ${OUTPUT_PATH}"
|
|
381
|
-
|
|
382
|
-
# ── Step 3: Choose analysis ──
|
|
383
|
-
CHOICE=$(show_analysis_menu)
|
|
384
|
-
|
|
385
|
-
# ── Step 4: Execute ──
|
|
386
|
-
local start_time
|
|
387
|
-
start_time=$(date +%s)
|
|
388
|
-
|
|
389
|
-
echo ""
|
|
390
|
-
echo -e "${BOLD}═══════════════════════════════════════════════════════════${NC}"
|
|
391
|
-
echo -e " ${BOLD}🚀 Iniciando análise...${NC}"
|
|
392
|
-
echo -e "${BOLD}═══════════════════════════════════════════════════════════${NC}"
|
|
393
|
-
|
|
394
|
-
case "$CHOICE" in
|
|
395
|
-
1) run_analyze "$PROJECT_PATH" "$OUTPUT_PATH" ;;
|
|
396
|
-
2) run_score "$PROJECT_PATH" "$OUTPUT_PATH" ;;
|
|
397
|
-
3) run_anti_patterns "$PROJECT_PATH" "$OUTPUT_PATH" ;;
|
|
398
|
-
4) run_agents "$PROJECT_PATH" "$OUTPUT_PATH" ;;
|
|
399
|
-
5) run_refactor "$PROJECT_PATH" "$OUTPUT_PATH" ;;
|
|
400
|
-
6) run_diagram "$PROJECT_PATH" "$OUTPUT_PATH" ;;
|
|
401
|
-
7)
|
|
402
|
-
run_analyze "$PROJECT_PATH" "$OUTPUT_PATH"
|
|
403
|
-
run_refactor "$PROJECT_PATH" "$OUTPUT_PATH"
|
|
404
|
-
run_agents "$PROJECT_PATH" "$OUTPUT_PATH"
|
|
405
|
-
run_diagram "$PROJECT_PATH" "$OUTPUT_PATH"
|
|
406
|
-
run_anti_patterns "$PROJECT_PATH" "$OUTPUT_PATH"
|
|
407
|
-
run_score "$PROJECT_PATH" "$OUTPUT_PATH"
|
|
408
|
-
;;
|
|
409
|
-
*)
|
|
410
|
-
print_error "Opção inválida: $CHOICE"
|
|
411
|
-
exit 1
|
|
412
|
-
;;
|
|
413
|
-
esac
|
|
414
|
-
|
|
415
|
-
local end_time
|
|
416
|
-
end_time=$(date +%s)
|
|
417
|
-
local elapsed=$((end_time - start_time))
|
|
418
|
-
|
|
419
|
-
echo ""
|
|
420
|
-
echo -e " ${DIM}⏱️ Tempo total: ${elapsed}s${NC}"
|
|
421
|
-
|
|
422
|
-
# ── Step 5: Open results ──
|
|
423
|
-
open_results "$OUTPUT_PATH"
|
|
424
|
-
|
|
425
|
-
echo ""
|
|
426
|
-
echo -e " ${DIM}Powered by @girardelli/architect v3.0${NC}"
|
|
427
|
-
echo ""
|
|
428
|
-
}
|
|
429
|
-
|
|
430
|
-
# ── Run ──
|
|
431
|
-
main "$@"
|