forgehive 1.0.4 → 1.0.6
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.js +287 -8
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -9450,6 +9450,279 @@ async function promptConfirm(question) {
|
|
|
9450
9450
|
});
|
|
9451
9451
|
});
|
|
9452
9452
|
}
|
|
9453
|
+
var ANSI = { bold: "\x1B[1m", dim: "\x1B[2m", reset: "\x1B[0m", cyan: "\x1B[36m", green: "\x1B[32m" };
|
|
9454
|
+
var CAP_DISPLAY = {
|
|
9455
|
+
// Sprache
|
|
9456
|
+
javascript: "JavaScript",
|
|
9457
|
+
typescript: "TypeScript",
|
|
9458
|
+
python: "Python",
|
|
9459
|
+
rust: "Rust",
|
|
9460
|
+
golang: "Go",
|
|
9461
|
+
java: "Java",
|
|
9462
|
+
kotlin: "Kotlin",
|
|
9463
|
+
scala: "Scala",
|
|
9464
|
+
ruby: "Ruby",
|
|
9465
|
+
php: "PHP",
|
|
9466
|
+
csharp: "C#",
|
|
9467
|
+
fsharp: "F#",
|
|
9468
|
+
vbnet: "VB.NET",
|
|
9469
|
+
swift: "Swift",
|
|
9470
|
+
dart: "Dart",
|
|
9471
|
+
elixir: "Elixir",
|
|
9472
|
+
crystal: "Crystal",
|
|
9473
|
+
zig: "Zig",
|
|
9474
|
+
nim: "Nim",
|
|
9475
|
+
perl: "Perl",
|
|
9476
|
+
cpp: "C++",
|
|
9477
|
+
cmake: "CMake",
|
|
9478
|
+
// Runtime
|
|
9479
|
+
nodejs: "Node.js",
|
|
9480
|
+
dotnet: ".NET",
|
|
9481
|
+
jvm: "JVM",
|
|
9482
|
+
flutter: "Flutter",
|
|
9483
|
+
// Framework
|
|
9484
|
+
react: "React",
|
|
9485
|
+
nextjs: "Next.js",
|
|
9486
|
+
vue: "Vue",
|
|
9487
|
+
nuxt: "Nuxt",
|
|
9488
|
+
svelte: "Svelte",
|
|
9489
|
+
sveltekit: "SvelteKit",
|
|
9490
|
+
angular: "Angular",
|
|
9491
|
+
remix: "Remix",
|
|
9492
|
+
astro: "Astro",
|
|
9493
|
+
gatsby: "Gatsby",
|
|
9494
|
+
qwik: "Qwik",
|
|
9495
|
+
solidjs: "SolidJS",
|
|
9496
|
+
express: "Express",
|
|
9497
|
+
fastify: "Fastify",
|
|
9498
|
+
nestjs: "NestJS",
|
|
9499
|
+
hono: "Hono",
|
|
9500
|
+
koa: "Koa",
|
|
9501
|
+
hapi: "Hapi",
|
|
9502
|
+
feathers: "Feathers",
|
|
9503
|
+
fastapi: "FastAPI",
|
|
9504
|
+
django: "Django",
|
|
9505
|
+
flask: "Flask",
|
|
9506
|
+
starlette: "Starlette",
|
|
9507
|
+
tornado: "Tornado",
|
|
9508
|
+
litestar: "Litestar",
|
|
9509
|
+
rails: "Rails",
|
|
9510
|
+
sinatra: "Sinatra",
|
|
9511
|
+
grape: "Grape",
|
|
9512
|
+
hanami: "Hanami",
|
|
9513
|
+
"spring-boot": "Spring Boot",
|
|
9514
|
+
"spring-web": "Spring Web",
|
|
9515
|
+
quarkus: "Quarkus",
|
|
9516
|
+
micronaut: "Micronaut",
|
|
9517
|
+
ktor: "Ktor",
|
|
9518
|
+
phoenix: "Phoenix",
|
|
9519
|
+
axum: "Axum",
|
|
9520
|
+
"actix-web": "Actix Web",
|
|
9521
|
+
warp: "Warp",
|
|
9522
|
+
rocket: "Rocket",
|
|
9523
|
+
poem: "Poem",
|
|
9524
|
+
gin: "Gin",
|
|
9525
|
+
echo: "Echo",
|
|
9526
|
+
fiber: "Fiber",
|
|
9527
|
+
chi: "Chi",
|
|
9528
|
+
"gorilla-mux": "Gorilla Mux",
|
|
9529
|
+
wpf: "WPF",
|
|
9530
|
+
avalonia: "Avalonia",
|
|
9531
|
+
maui: "MAUI",
|
|
9532
|
+
blazor: "Blazor",
|
|
9533
|
+
"uno-platform": "Uno Platform",
|
|
9534
|
+
liveview: "LiveView",
|
|
9535
|
+
mvvm: "MVVM",
|
|
9536
|
+
carter: "Carter",
|
|
9537
|
+
fastendpoints: "FastEndpoints",
|
|
9538
|
+
// ORM / DB
|
|
9539
|
+
prisma: "Prisma",
|
|
9540
|
+
drizzle: "Drizzle",
|
|
9541
|
+
typeorm: "TypeORM",
|
|
9542
|
+
mongoose: "Mongoose",
|
|
9543
|
+
sequelize: "Sequelize",
|
|
9544
|
+
knex: "Knex",
|
|
9545
|
+
"mikro-orm": "MikroORM",
|
|
9546
|
+
"ef-core": "EF Core",
|
|
9547
|
+
gorm: "GORM",
|
|
9548
|
+
sqlx: "sqlx",
|
|
9549
|
+
diesel: "Diesel",
|
|
9550
|
+
"sea-orm": "SeaORM",
|
|
9551
|
+
ecto: "Ecto",
|
|
9552
|
+
activerecord: "ActiveRecord",
|
|
9553
|
+
sequel: "Sequel",
|
|
9554
|
+
dapper: "Dapper",
|
|
9555
|
+
sqlalchemy: "SQLAlchemy",
|
|
9556
|
+
"tortoise-orm": "Tortoise ORM",
|
|
9557
|
+
"rom-rb": "ROM-rb",
|
|
9558
|
+
postgresql: "PostgreSQL",
|
|
9559
|
+
mysql: "MySQL",
|
|
9560
|
+
sqlite: "SQLite",
|
|
9561
|
+
mongodb: "MongoDB",
|
|
9562
|
+
redis: "Redis",
|
|
9563
|
+
elasticsearch: "Elasticsearch",
|
|
9564
|
+
turso: "Turso",
|
|
9565
|
+
neon: "Neon",
|
|
9566
|
+
dynamodb: "DynamoDB",
|
|
9567
|
+
csvhelper: "CsvHelper",
|
|
9568
|
+
epplus: "EPPlus",
|
|
9569
|
+
closedxml: "ClosedXML",
|
|
9570
|
+
// Auth
|
|
9571
|
+
"next-auth": "NextAuth",
|
|
9572
|
+
"auth-js": "Auth.js",
|
|
9573
|
+
lucia: "Lucia",
|
|
9574
|
+
passport: "Passport",
|
|
9575
|
+
jwt: "JWT",
|
|
9576
|
+
bcrypt: "bcrypt",
|
|
9577
|
+
clerk: "Clerk",
|
|
9578
|
+
devise: "Devise",
|
|
9579
|
+
doorkeeper: "Doorkeeper",
|
|
9580
|
+
guardian: "Guardian",
|
|
9581
|
+
pow: "Pow",
|
|
9582
|
+
identityserver: "IdentityServer",
|
|
9583
|
+
azure: "Azure AD",
|
|
9584
|
+
oauth2: "OAuth2",
|
|
9585
|
+
"google-sign-in": "Google Sign-In",
|
|
9586
|
+
"microsoft-identity": "Microsoft Identity",
|
|
9587
|
+
auth: "Auth",
|
|
9588
|
+
// Testing
|
|
9589
|
+
jest: "Jest",
|
|
9590
|
+
vitest: "Vitest",
|
|
9591
|
+
mocha: "Mocha",
|
|
9592
|
+
jasmine: "Jasmine",
|
|
9593
|
+
playwright: "Playwright",
|
|
9594
|
+
cypress: "Cypress",
|
|
9595
|
+
puppeteer: "Puppeteer",
|
|
9596
|
+
rspec: "RSpec",
|
|
9597
|
+
minitest: "Minitest",
|
|
9598
|
+
xunit: "xUnit",
|
|
9599
|
+
nunit: "NUnit",
|
|
9600
|
+
mstest: "MSTest",
|
|
9601
|
+
pytest: "pytest",
|
|
9602
|
+
testify: "Testify",
|
|
9603
|
+
ginkgo: "Ginkgo",
|
|
9604
|
+
exunit: "ExUnit",
|
|
9605
|
+
"ex-machina": "ex_machina",
|
|
9606
|
+
"unit-testing": "Unit Testing",
|
|
9607
|
+
"e2e-testing": "E2E Testing",
|
|
9608
|
+
"bdd-testing": "BDD Testing",
|
|
9609
|
+
moq: "Moq",
|
|
9610
|
+
nsubstitute: "NSubstitute",
|
|
9611
|
+
fakeiteasy: "FakeItEasy",
|
|
9612
|
+
mockito: "Mockito",
|
|
9613
|
+
mocking: "Mocking",
|
|
9614
|
+
mocktail: "Mocktail",
|
|
9615
|
+
mockall: "Mockall",
|
|
9616
|
+
"fluent-assertions": "FluentAssertions",
|
|
9617
|
+
shouldly: "Shouldly",
|
|
9618
|
+
assertj: "AssertJ",
|
|
9619
|
+
capybara: "Capybara",
|
|
9620
|
+
"factory-bot": "FactoryBot",
|
|
9621
|
+
"dotnet-test": ".NET Test",
|
|
9622
|
+
benchmark: "Benchmark",
|
|
9623
|
+
// AI / ML
|
|
9624
|
+
openai: "OpenAI",
|
|
9625
|
+
anthropic: "Anthropic",
|
|
9626
|
+
langchain: "LangChain",
|
|
9627
|
+
huggingface: "Hugging Face",
|
|
9628
|
+
pytorch: "PyTorch",
|
|
9629
|
+
tensorflow: "TensorFlow",
|
|
9630
|
+
keras: "Keras",
|
|
9631
|
+
jax: "JAX",
|
|
9632
|
+
"scikit-learn": "scikit-learn",
|
|
9633
|
+
numpy: "NumPy",
|
|
9634
|
+
pandas: "pandas",
|
|
9635
|
+
spacy: "spaCy",
|
|
9636
|
+
nltk: "NLTK",
|
|
9637
|
+
"vercel-ai": "Vercel AI",
|
|
9638
|
+
"llama-index": "LlamaIndex",
|
|
9639
|
+
chromadb: "ChromaDB",
|
|
9640
|
+
pinecone: "Pinecone",
|
|
9641
|
+
weaviate: "Weaviate",
|
|
9642
|
+
qdrant: "Qdrant",
|
|
9643
|
+
milvus: "Milvus",
|
|
9644
|
+
faiss: "FAISS",
|
|
9645
|
+
gemini: "Gemini",
|
|
9646
|
+
mistral: "Mistral",
|
|
9647
|
+
groq: "Groq",
|
|
9648
|
+
// Build
|
|
9649
|
+
vite: "Vite",
|
|
9650
|
+
webpack: "Webpack",
|
|
9651
|
+
esbuild: "esbuild",
|
|
9652
|
+
rollup: "Rollup",
|
|
9653
|
+
parcel: "Parcel",
|
|
9654
|
+
swc: "SWC",
|
|
9655
|
+
babel: "Babel",
|
|
9656
|
+
turborepo: "Turborepo",
|
|
9657
|
+
nx: "Nx",
|
|
9658
|
+
lerna: "Lerna",
|
|
9659
|
+
gradle: "Gradle",
|
|
9660
|
+
maven: "Maven",
|
|
9661
|
+
sbt: "sbt",
|
|
9662
|
+
cargo: "Cargo",
|
|
9663
|
+
spm: "SPM",
|
|
9664
|
+
cocoapods: "CocoaPods",
|
|
9665
|
+
carthage: "Carthage",
|
|
9666
|
+
pip: "pip",
|
|
9667
|
+
pipenv: "Pipenv",
|
|
9668
|
+
bundler: "Bundler",
|
|
9669
|
+
composer: "Composer",
|
|
9670
|
+
nuget: "NuGet",
|
|
9671
|
+
// CI/CD
|
|
9672
|
+
"github-actions": "GitHub Actions",
|
|
9673
|
+
"gitlab-ci": "GitLab CI",
|
|
9674
|
+
"travis-ci": "Travis CI",
|
|
9675
|
+
jenkins: "Jenkins",
|
|
9676
|
+
circleci: "CircleCI",
|
|
9677
|
+
"azure-devops": "Azure DevOps",
|
|
9678
|
+
bitbucket: "Bitbucket",
|
|
9679
|
+
"ci-cd": "CI/CD",
|
|
9680
|
+
// Infra
|
|
9681
|
+
docker: "Docker",
|
|
9682
|
+
"docker-compose": "Docker Compose",
|
|
9683
|
+
kubernetes: "Kubernetes",
|
|
9684
|
+
helm: "Helm",
|
|
9685
|
+
terraform: "Terraform",
|
|
9686
|
+
ansible: "Ansible",
|
|
9687
|
+
pulumi: "Pulumi",
|
|
9688
|
+
"aws-cdk": "AWS CDK",
|
|
9689
|
+
vagrant: "Vagrant",
|
|
9690
|
+
"infrastructure-as-code": "IaC",
|
|
9691
|
+
// Hosting
|
|
9692
|
+
vercel: "Vercel",
|
|
9693
|
+
netlify: "Netlify",
|
|
9694
|
+
"fly-io": "Fly.io",
|
|
9695
|
+
render: "Render",
|
|
9696
|
+
heroku: "Heroku",
|
|
9697
|
+
"gcp-app-engine": "GCP App Engine",
|
|
9698
|
+
"aws-lambda": "AWS Lambda",
|
|
9699
|
+
serverless: "Serverless",
|
|
9700
|
+
// Messaging
|
|
9701
|
+
rabbitmq: "RabbitMQ",
|
|
9702
|
+
kafka: "Kafka",
|
|
9703
|
+
nats: "NATS",
|
|
9704
|
+
masstransit: "MassTransit",
|
|
9705
|
+
oban: "Oban",
|
|
9706
|
+
broadway: "Broadway",
|
|
9707
|
+
sidekiq: "Sidekiq",
|
|
9708
|
+
celery: "Celery",
|
|
9709
|
+
hangfire: "Hangfire",
|
|
9710
|
+
"task-queue": "Task Queue",
|
|
9711
|
+
messaging: "Messaging",
|
|
9712
|
+
// Observability
|
|
9713
|
+
opentelemetry: "OpenTelemetry",
|
|
9714
|
+
prometheus: "Prometheus",
|
|
9715
|
+
sentry: "Sentry",
|
|
9716
|
+
datadog: "Datadog",
|
|
9717
|
+
logging: "Logging",
|
|
9718
|
+
serilog: "Serilog",
|
|
9719
|
+
nlog: "NLog",
|
|
9720
|
+
logrus: "Logrus",
|
|
9721
|
+
zap: "Zap",
|
|
9722
|
+
pino: "Pino",
|
|
9723
|
+
winston: "Winston",
|
|
9724
|
+
loguru: "Loguru"
|
|
9725
|
+
};
|
|
9453
9726
|
var CAP_CATEGORIES = [
|
|
9454
9727
|
["Sprache", ["javascript", "typescript", "python", "rust", "golang", "java", "kotlin", "scala", "ruby", "php", "csharp", "fsharp", "vbnet", "swift", "dart", "elixir", "crystal", "zig", "nim", "perl", "cpp", "cmake"]],
|
|
9455
9728
|
["Runtime", ["nodejs", "dotnet", "jvm", "flutter"]],
|
|
@@ -9474,15 +9747,17 @@ function buildCapabilitySummary(ids) {
|
|
|
9474
9747
|
const matched = members.filter((m) => set2.has(m));
|
|
9475
9748
|
if (matched.length === 0) continue;
|
|
9476
9749
|
matched.forEach((m) => used.add(m));
|
|
9477
|
-
rows.push([label, matched
|
|
9750
|
+
rows.push([label, matched]);
|
|
9478
9751
|
}
|
|
9479
9752
|
const rest2 = ids.filter((id) => !used.has(id));
|
|
9480
|
-
if (rest2.length > 0) rows.push(["Weitere", rest2
|
|
9753
|
+
if (rest2.length > 0) rows.push(["Weitere", rest2]);
|
|
9481
9754
|
if (rows.length === 0) return " (keine Capabilities erkannt)";
|
|
9482
9755
|
const labelWidth = Math.max(...rows.map((r) => r[0].length));
|
|
9483
|
-
|
|
9484
|
-
|
|
9485
|
-
|
|
9756
|
+
const sep = `${ANSI.dim} \xB7 ${ANSI.reset}`;
|
|
9757
|
+
return rows.map(([label, capIds]) => {
|
|
9758
|
+
const names = capIds.map((id) => CAP_DISPLAY[id] ?? id).join(sep);
|
|
9759
|
+
return ` ${ANSI.green}\u2726${ANSI.reset} ${ANSI.bold}${label.padEnd(labelWidth)}${ANSI.reset} ${names}`;
|
|
9760
|
+
}).join("\n");
|
|
9486
9761
|
}
|
|
9487
9762
|
if (command === "init") {
|
|
9488
9763
|
(async () => {
|
|
@@ -9503,13 +9778,17 @@ if (command === "init") {
|
|
|
9503
9778
|
console.log(` Nutze 'fh scan --update' um nur den Scan zu aktualisieren.`);
|
|
9504
9779
|
process.exit(0);
|
|
9505
9780
|
}
|
|
9506
|
-
process.stdout.write("\u{1F50D} Analysiere Projekt...");
|
|
9507
9781
|
const scanResult = scan(projectRoot);
|
|
9508
9782
|
const capMap = mapSignalsToCapabilities(scanResult);
|
|
9509
9783
|
const totalSignals = scanResult.signals.length;
|
|
9510
9784
|
const totalCaps = capMap.confirmed.length;
|
|
9511
|
-
|
|
9512
|
-
|
|
9785
|
+
const projectName = path40.basename(projectRoot);
|
|
9786
|
+
const sep51 = ANSI.dim + "\u2500".repeat(51) + ANSI.reset;
|
|
9787
|
+
console.log(`
|
|
9788
|
+
\u{1F50D} ${ANSI.cyan}${ANSI.bold}ForgeHive${ANSI.reset} ${ANSI.dim}\xB7${ANSI.reset} Stack Intelligence`);
|
|
9789
|
+
console.log(` ${ANSI.dim}${projectName} \xB7 ${totalSignals} Signale \xB7 ${totalCaps} Capabilities${ANSI.reset}`);
|
|
9790
|
+
console.log(sep51);
|
|
9791
|
+
console.log();
|
|
9513
9792
|
const block = loadClaudeMdBlock();
|
|
9514
9793
|
writeForgehiveDir(projectRoot, scanResult, capMap, block);
|
|
9515
9794
|
const hash = computeHash(projectRoot);
|