499 lines
15 KiB
JSON
499 lines
15 KiB
JSON
{
|
|
"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."
|
|
}
|
|
]
|
|
}
|