forgehive 1.0.3 → 1.0.4
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 +41 -17
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -9450,13 +9450,39 @@ async function promptConfirm(question) {
|
|
|
9450
9450
|
});
|
|
9451
9451
|
});
|
|
9452
9452
|
}
|
|
9453
|
+
var CAP_CATEGORIES = [
|
|
9454
|
+
["Sprache", ["javascript", "typescript", "python", "rust", "golang", "java", "kotlin", "scala", "ruby", "php", "csharp", "fsharp", "vbnet", "swift", "dart", "elixir", "crystal", "zig", "nim", "perl", "cpp", "cmake"]],
|
|
9455
|
+
["Runtime", ["nodejs", "dotnet", "jvm", "flutter"]],
|
|
9456
|
+
["Framework", ["react", "nextjs", "vue", "nuxt", "svelte", "sveltekit", "angular", "remix", "astro", "gatsby", "qwik", "solidjs", "express", "fastify", "nestjs", "hono", "koa", "hapi", "feathers", "fastapi", "django", "flask", "starlette", "tornado", "litestar", "rails", "sinatra", "grape", "hanami", "spring-boot", "spring-web", "quarkus", "micronaut", "ktor", "phoenix", "axum", "actix-web", "warp", "rocket", "poem", "gin", "echo", "fiber", "chi", "gorilla-mux", "wpf", "avalonia", "maui", "blazor", "uno-platform", "liveview", "mvvm", "carter", "fastendpoints"]],
|
|
9457
|
+
["ORM / DB", ["prisma", "drizzle", "typeorm", "mongoose", "sequelize", "knex", "mikro-orm", "ef-core", "gorm", "sqlx", "diesel", "sea-orm", "ecto", "activerecord", "sequel", "dapper", "sqlalchemy", "tortoise-orm", "rom-rb", "postgresql", "mysql", "sqlite", "mongodb", "redis", "elasticsearch", "turso", "neon", "dynamodb", "csvhelper", "epplus", "closedxml"]],
|
|
9458
|
+
["Auth", ["next-auth", "auth-js", "lucia", "passport", "jwt", "bcrypt", "clerk", "devise", "doorkeeper", "guardian", "pow", "identityserver", "azure", "oauth2", "google-sign-in", "microsoft-identity", "auth"]],
|
|
9459
|
+
["Testing", ["jest", "vitest", "mocha", "jasmine", "playwright", "cypress", "puppeteer", "rspec", "minitest", "xunit", "nunit", "mstest", "pytest", "testify", "ginkgo", "exunit", "ex-machina", "unit-testing", "e2e-testing", "bdd-testing", "moq", "nsubstitute", "fakeiteasy", "mockito", "mocking", "mocktail", "mockall", "fluent-assertions", "shouldly", "assertj", "capybara", "factory-bot", "dotnet-test", "benchmark"]],
|
|
9460
|
+
["AI / ML", ["openai", "anthropic", "langchain", "huggingface", "pytorch", "tensorflow", "keras", "jax", "scikit-learn", "numpy", "pandas", "spacy", "nltk", "vercel-ai", "llama-index", "chromadb", "pinecone", "weaviate", "qdrant", "milvus", "faiss", "gemini", "mistral", "groq"]],
|
|
9461
|
+
["Build", ["vite", "webpack", "esbuild", "rollup", "parcel", "swc", "babel", "turborepo", "nx", "lerna", "gradle", "maven", "sbt", "cargo", "spm", "cocoapods", "carthage", "pip", "pipenv", "bundler", "composer", "nuget"]],
|
|
9462
|
+
["CI/CD", ["github-actions", "gitlab-ci", "travis-ci", "jenkins", "circleci", "azure-devops", "bitbucket", "ci-cd"]],
|
|
9463
|
+
["Infra", ["docker", "docker-compose", "kubernetes", "helm", "terraform", "ansible", "pulumi", "aws-cdk", "vagrant", "infrastructure-as-code"]],
|
|
9464
|
+
["Hosting", ["vercel", "netlify", "fly-io", "render", "heroku", "gcp-app-engine", "aws-lambda", "serverless"]],
|
|
9465
|
+
["Messaging", ["rabbitmq", "kafka", "nats", "masstransit", "oban", "broadway", "sidekiq", "celery", "hangfire", "task-queue", "messaging"]],
|
|
9466
|
+
["Observ.", ["opentelemetry", "prometheus", "sentry", "datadog", "logging", "serilog", "nlog", "logrus", "zap", "pino", "winston", "loguru"]]
|
|
9467
|
+
];
|
|
9453
9468
|
function buildCapabilitySummary(ids) {
|
|
9454
|
-
if (ids.length === 0) return "
|
|
9455
|
-
const
|
|
9456
|
-
|
|
9457
|
-
|
|
9458
|
-
|
|
9459
|
-
|
|
9469
|
+
if (ids.length === 0) return " (keine Capabilities erkannt)";
|
|
9470
|
+
const set2 = new Set(ids);
|
|
9471
|
+
const rows = [];
|
|
9472
|
+
const used = /* @__PURE__ */ new Set();
|
|
9473
|
+
for (const [label, members] of CAP_CATEGORIES) {
|
|
9474
|
+
const matched = members.filter((m) => set2.has(m));
|
|
9475
|
+
if (matched.length === 0) continue;
|
|
9476
|
+
matched.forEach((m) => used.add(m));
|
|
9477
|
+
rows.push([label, matched.join(" \xB7 ")]);
|
|
9478
|
+
}
|
|
9479
|
+
const rest2 = ids.filter((id) => !used.has(id));
|
|
9480
|
+
if (rest2.length > 0) rows.push(["Weitere", rest2.join(" \xB7 ")]);
|
|
9481
|
+
if (rows.length === 0) return " (keine Capabilities erkannt)";
|
|
9482
|
+
const labelWidth = Math.max(...rows.map((r) => r[0].length));
|
|
9483
|
+
return rows.map(
|
|
9484
|
+
([label, val]) => ` ${label.padEnd(labelWidth)} ${val}`
|
|
9485
|
+
).join("\n");
|
|
9460
9486
|
}
|
|
9461
9487
|
if (command === "init") {
|
|
9462
9488
|
(async () => {
|
|
@@ -9477,14 +9503,13 @@ if (command === "init") {
|
|
|
9477
9503
|
console.log(` Nutze 'fh scan --update' um nur den Scan zu aktualisieren.`);
|
|
9478
9504
|
process.exit(0);
|
|
9479
9505
|
}
|
|
9480
|
-
|
|
9506
|
+
process.stdout.write("\u{1F50D} Analysiere Projekt...");
|
|
9481
9507
|
const scanResult = scan(projectRoot);
|
|
9482
|
-
const tierCount = [1, 2, 3].map((t) => scanResult.signals.filter((s) => s.tier === t).length);
|
|
9483
|
-
console.log(` \u2713 ${tierCount[0]} Technologie-Signale erkannt`);
|
|
9484
|
-
console.log(` \u2713 ${tierCount[1]} Infrastruktur-Signale erkannt`);
|
|
9485
|
-
console.log(` \u2713 ${tierCount[2]} Kontext-Signale erkannt`);
|
|
9486
|
-
console.log();
|
|
9487
9508
|
const capMap = mapSignalsToCapabilities(scanResult);
|
|
9509
|
+
const totalSignals = scanResult.signals.length;
|
|
9510
|
+
const totalCaps = capMap.confirmed.length;
|
|
9511
|
+
console.log(` ${totalSignals} Signale \xB7 ${totalCaps} Capabilities
|
|
9512
|
+
`);
|
|
9488
9513
|
const block = loadClaudeMdBlock();
|
|
9489
9514
|
writeForgehiveDir(projectRoot, scanResult, capMap, block);
|
|
9490
9515
|
const hash = computeHash(projectRoot);
|
|
@@ -9495,19 +9520,18 @@ if (command === "init") {
|
|
|
9495
9520
|
"forgehive"
|
|
9496
9521
|
);
|
|
9497
9522
|
initForgehiveRuntime(forgehiveDir, runtimeDir);
|
|
9498
|
-
console.log("\u2713 forgehive initialisiert\n");
|
|
9499
9523
|
console.log(buildCapabilitySummary(capMap.confirmed.map((c) => c.id)));
|
|
9500
9524
|
console.log();
|
|
9501
9525
|
if (subcommand === "--yes" || rest.includes("--yes")) {
|
|
9502
9526
|
confirm(projectRoot);
|
|
9503
|
-
console.log("\u2713
|
|
9527
|
+
console.log("\u2713 forgehive bereit\n");
|
|
9504
9528
|
} else {
|
|
9505
|
-
const ok = await promptConfirm("
|
|
9529
|
+
const ok = await promptConfirm(" Best\xE4tigen und loslegen? [Y/n] ");
|
|
9506
9530
|
if (ok) {
|
|
9507
9531
|
confirm(projectRoot);
|
|
9508
|
-
console.log("\u2713
|
|
9532
|
+
console.log("\n\u2713 forgehive bereit \u2014 \xF6ffne Claude Code in diesem Projekt.\n");
|
|
9509
9533
|
} else {
|
|
9510
|
-
console.log(" \xDCberpr\xFCfe .forgehive/capabilities.yaml, dann: fh confirm\n");
|
|
9534
|
+
console.log("\n \xDCberpr\xFCfe .forgehive/capabilities.yaml, dann: fh confirm\n");
|
|
9511
9535
|
}
|
|
9512
9536
|
}
|
|
9513
9537
|
})().catch((err) => {
|