Initial release v1.0.0

Open-source marketplace for AI Agent skills.

Features:
- Next.js 15 web app with i18n (en/fa)
- CLI tool for skill installation (npx skillhub)
- GitHub crawler/indexer with multi-strategy discovery
- Security scanning for all indexed skills
- Self-hostable with Docker

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
airano
2026-02-12 06:08:51 +03:30
commit 97b427831a
227 changed files with 48411 additions and 0 deletions

View File

@@ -0,0 +1,58 @@
// This file configures the initialization of Sentry on the client.
// The config you add here will be used whenever a users loads a page in their browser.
// https://docs.sentry.io/platforms/javascript/guides/nextjs/
import * as Sentry from "@sentry/nextjs";
Sentry.init({
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
// Environment and release tracking
environment: process.env.NODE_ENV,
release: process.env.NEXT_PUBLIC_SENTRY_RELEASE,
// Enable structured logging
enableLogs: true,
// Console logging integration - capture warnings and errors
integrations: [
Sentry.consoleLoggingIntegration({
levels: ["warn", "error"],
}),
],
// Performance Monitoring
// Capture 10% of transactions in production, 100% in development
tracesSampleRate: process.env.NODE_ENV === "production" ? 0.1 : 1.0,
// Session Replay for debugging user issues
replaysSessionSampleRate: 0.1, // 10% of sessions
replaysOnErrorSampleRate: 1.0, // 100% of sessions with errors
// Filter out common non-actionable errors
beforeSend(event, hint) {
// Ignore ResizeObserver errors (browser quirk, not actionable)
if (event.exception?.values?.[0]?.value?.includes("ResizeObserver")) {
return null;
}
// Log to console in development for debugging
if (process.env.NODE_ENV === "development") {
console.error("[Sentry]", hint.originalException || hint.syntheticException);
}
return event;
},
// Filter out noisy breadcrumbs
beforeBreadcrumb(breadcrumb) {
// Ignore fetch requests to analytics endpoints
if (
breadcrumb.category === "fetch" &&
breadcrumb.data?.url?.includes("analytics")
) {
return null;
}
return breadcrumb;
},
});