{ "meta": { "lastReviewed": "2026-04-20", "instructions": [ "Add one workflow entry for every n8n workflow that feeds or is triggered by this repository.", "Keep repository.consumers paths repo-relative.", "Optional: export workflow JSON into docs/integrations/n8n/exports/ and reference it from n8n.exportFile." ] }, "workflows": [ { "id": "ai-search", "status": "confirmed", "name": "AI Search", "purpose": "Resolve semantic search candidates from n8n and hydrate them into project results.", "n8n": { "workflowId": "F5cQ06DykBfpeyfqL-pd7", "exportFile": "", "entrypoints": [ { "kind": "webhook", "method": "GET", "path": "ai-search" } ] }, "repository": { "consumers": [ "src/app/api/search/ai/route.ts" ], "env": [ "N8N_AI_SEARCH_WEBHOOK" ], "schemas": [ "N8NSearchResponseSchema" ] }, "contracts": { "requestFields": [ "desc", "limit", "page", "offset", "tags", "domains", "productForms" ], "responseFields": [ "results[].id", "results[].similarity", "pagination.total", "pagination.totalPages", "pagination.hasMore" ] }, "upstreams": [ "RAG项目搜索", "pgvector similarity search", "SiliconFlow embeddings" ], "downstreams": [ "src/hooks/useProjects.ts#getProjectsByIds", "POST /api/search/ai response" ], "owners": [], "notes": "Confirmed against live n8n MCP: webhook path is `ai-search` and the workflow returns `results[].id` plus `similarity`." }, { "id": "signals-aggregation", "status": "confirmed", "name": "Signals Aggregation", "purpose": "Aggregate multi-source discussion signals, filter them with AI, and ingest them into the repository signal store.", "n8n": { "workflowId": "bAxNZKGq2ApUUiw9", "exportFile": "", "entrypoints": [ { "kind": "schedule", "path": "multi-source discussion crawl" } ] }, "repository": { "consumers": [ "src/lib/auth.ts", "src/app/api/webhook/signals/route.ts", "src/app/api/signals/route.ts", "src/lib/validations.ts", "prisma/schema.prisma" ], "env": [ "WEBHOOK_API_KEY" ], "schemas": [ "SignalWebhookPayloadSchema", "SignalIngestionInputSchema", "SignalQuerySchema" ] }, "contracts": { "requestFields": [ "apiKey", "signals[].source", "signals[].sourceUrl", "signals[].title", "signals[].titleEn", "signals[].summary", "signals[].summaryEn", "signals[].topic", "signals[].topicEn", "signals[].tags", "signals[].sections", "signals[].engagement", "signals[].hotScore", "signals[].isHot", "signals[].publishedAt", "signals[].isActive" ], "responseFields": [ "success", "processed", "created", "updated", "failed", "errors[].index", "errors[].field", "errors[].message" ] }, "upstreams": [ "Hacker News", "GitHub", "arXiv", "Reddit", "Product Hunt", "Hugging Face" ], "downstreams": [ "GET /api/signals", "signals page feed", "signal hotness computation" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow posts to `/api/webhook/signals` and also triggers external discovery dedupe/task creation. Workflow currently embeds a shared secret in HTTP body and should move to credentials/env." }, { "id": "tag-reset", "status": "confirmed", "name": "Project Tag Reset", "purpose": "Reset selected project tags in bulk from n8n classification results.", "n8n": { "workflowId": "8tIgBqLyWrBewJPs", "exportFile": "", "entrypoints": [ { "kind": "manual", "path": "bulk tag reset" } ] }, "repository": { "consumers": [ "src/lib/auth.ts", "src/app/api/tags/reset-projects/route.ts", "src/lib/validations.ts", "prisma/schema.prisma" ], "env": [ "WEBHOOK_API_KEY" ], "schemas": [ "ProjectTagResetRequestSchema" ] }, "contracts": { "requestFields": [ "apiKey", "dryRun", "replaceAllCategories", "categories", "projects[].projectSlug", "projects[].selectedTagSlugsByCategory" ], "responseFields": [ "success", "result.dryRun", "result.categories", "result.updatedCount", "result.failedCount", "result.results[].projectSlug", "result.results[].status", "result.results[].details" ] }, "upstreams": [ "n8n tag classification" ], "downstreams": [ "project tag relations", "project detail page revalidation", "project list revalidation" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow reads `/api/tags` and `/api/projects`, then posts bulk updates into `/api/tags/reset-projects`. Workflow currently embeds a shared secret in HTTP body and should move to credentials/env." }, { "id": "project-ingestion-multi-source", "status": "external-upstream", "name": "Project Ingestion (Multi-source)", "purpose": "Consume queued discovery tasks, enrich project metadata with AI/browser steps, and write final ingestion results back to Agent Park.", "n8n": { "workflowId": "1Ig1CyVMsGJFaHOe", "exportFile": "", "entrypoints": [ { "kind": "schedule", "path": "every 10 minutes" } ] }, "repository": { "consumers": [ "prisma/schema.prisma", "src/app/api/projects/route.ts", "src/app/api/projects/[slug]/route.ts" ], "env": [], "schemas": [] }, "contracts": { "requestFields": [ "task.status", "task.sourceUrl", "task.sourceType" ], "responseFields": [ "project content", "tag assignments", "task completion status" ] }, "upstreams": [ "discovery task queue", "browser/AI extraction", "tag catalog" ], "downstreams": [ "project records visible in repository APIs", "task completion callbacks", "task failure callbacks" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow polls `/api/discovery/tasks`, marks tasks `IN_PROGRESS`, enriches candidates, then completes or fails tasks. The current repo does not contain `/api/discovery/*` handlers, so this is an upstream system dependency rather than a route implemented here." }, { "id": "github-star-refresh", "status": "confirmed", "name": "GitHub Star Refresh", "purpose": "Refresh `projects.githubStars` and `projects.githubStarsUpdatedAt` directly from GitHub repository metadata.", "n8n": { "workflowId": "ewx9Gs6cjrTXvwD0", "exportFile": "", "entrypoints": [ { "kind": "schedule", "path": "daily at 04:00" } ] }, "repository": { "consumers": [ "prisma/schema.prisma", "src/app/api/search/ai/route.ts", "src/hooks/useProjects.ts" ], "env": [], "schemas": [] }, "contracts": { "requestFields": [ "projects.id", "projects.slug", "external_links.url(type=GITHUB)" ], "responseFields": [ "projects.githubStars", "projects.githubStarsUpdatedAt" ] }, "upstreams": [ "GitHub repository API", "projects table", "external_links table" ], "downstreams": [ "project ranking", "star sorting", "home ranking display" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow reads active project GitHub links from Postgres, fetches repository metadata from GitHub, then writes star counts directly back to Postgres. This bypasses repository API routes." }, { "id": "project-description-vectorization", "status": "confirmed", "name": "Project Description Vectorization", "purpose": "Generate and persist project embeddings used by semantic search.", "n8n": { "workflowId": "1AvejnM5n-WPApU1vFt9C", "exportFile": "", "entrypoints": [ { "kind": "schedule", "path": "every 30 minutes" } ] }, "repository": { "consumers": [ "prisma/schema.prisma", "prisma/migrations/20260126000000_add_project_embedding/migration.sql", "src/app/api/search/ai/route.ts" ], "env": [], "schemas": [] }, "contracts": { "requestFields": [ "projects.id", "projects.name", "projects.nameEn", "projects.description", "projects.descriptionEn", "projects.content", "projects.contentEn" ], "responseFields": [ "projects.embedding", "projects.embeddingUpdatedAt" ] }, "upstreams": [ "SiliconFlow embeddings API", "projects table" ], "downstreams": [ "RAG项目搜索", "semantic search quality" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow selects active projects with null embeddings, generates `BAAI/bge-m3` vectors, and writes them directly into the `vector` column. This is a direct DB maintenance job, not a repository API route." }, { "id": "github-trending-discovery", "status": "external-upstream", "name": "GitHub Trending Discovery", "purpose": "Scrape GitHub Trending, dedupe candidates, filter them with AI, and enqueue project discovery tasks.", "n8n": { "workflowId": "hughGsWismCpk7jd", "exportFile": "", "entrypoints": [ { "kind": "schedule", "path": "daily at 01:00" } ] }, "repository": { "consumers": [ "src/app/api/projects/route.ts", "src/app/api/projects/[slug]/route.ts" ], "env": [], "schemas": [] }, "contracts": { "requestFields": [ "GitHub trending repository URL", "apiKey", "tasks[].sourceUrl", "tasks[].sourceType" ], "responseFields": [ "dedupe shouldCreate", "task creation result" ] }, "upstreams": [ "https://github.com/trending", "AI keep/discard filter" ], "downstreams": [ "/api/discovery/check-duplicates", "/api/discovery/tasks", "project ingestion queue" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow scrapes GitHub Trending, filters candidates with an LLM, then posts queued tasks into discovery webhook endpoints. The current repo does not implement `/api/discovery/*`, so treat this as upstream data intake." }, { "id": "topic-discovery", "status": "external-upstream", "name": "Topic Discovery", "purpose": "Search GitHub topics and keywords for agent/LLM engineering repos, dedupe them, and enqueue discovery tasks.", "n8n": { "workflowId": "iw9vx9ih5Lt0Mobk", "exportFile": "", "entrypoints": [ { "kind": "schedule", "path": "daily at 01:00" } ] }, "repository": { "consumers": [ "src/app/api/projects/route.ts", "src/app/api/projects/[slug]/route.ts" ], "env": [], "schemas": [] }, "contracts": { "requestFields": [ "GitHub search query", "apiKey", "tasks[].sourceUrl", "tasks[].sourceType" ], "responseFields": [ "dedupe shouldCreate", "task creation result", "low recall alert" ] }, "upstreams": [ "GitHub Search API", "AI keep/discard filter", "topic watchlist" ], "downstreams": [ "/api/discovery/check-duplicates", "/api/discovery/tasks", "project ingestion queue" ], "owners": [], "notes": "Confirmed against live n8n MCP: workflow searches agent, infra, observability, evaluation, and MCP-related repositories, then posts accepted candidates into discovery webhooks. The current repo does not implement `/api/discovery/*`, so this is upstream context rather than in-repo routing." }, { "id": "ai-chat-gateway", "status": "adjacent", "name": "AI Chat Gateway", "purpose": "Expose a chat-oriented webhook wrapper around `RAG项目搜索` and package search hits into chat blocks/citations.", "n8n": { "workflowId": "Rncc22jmHEaYOG58", "exportFile": "", "entrypoints": [ { "kind": "webhook", "method": "POST", "path": "agent-park-chat" } ] }, "repository": { "consumers": [], "env": [], "schemas": [] }, "contracts": { "requestFields": [ "requestId", "sessionId", "clientId", "locale", "mode", "message" ], "responseFields": [ "message.blocks", "message.citations", "message.meta.source", "progress.stage" ] }, "upstreams": [ "RAG项目搜索", "n8n webhook `ai-search`" ], "downstreams": [ "external chat clients", "project detail URLs" ], "owners": [], "notes": "Confirmed against live n8n MCP: this workflow is related to Agent Park but does not call a repository route directly. It wraps the RAG webhook and formats citations pointing at project pages." } ] }