DOCS/workflow/_archive/github_service_request.json
happybell80 45847403fe docs: workflow Phase 1 정리 — 레거시 이동, n8n 제거, IP 하드코딩 제거
- 레거시 .md 2건(slack_basic_dialogue, service_health_check)을 _archive/로 이동
- n8n .json 파일 18건을 _archive/로 이동
- README.md 전면 재작성: n8n 전제 제거, 현행 아키텍처(APScheduler DB + SKILL.md) 반영
- 구 IP(192.168.219.52)를 localhost로 교체 (infrastructure-ssot-principle 준수)

Refs: DOCS#8

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-06 07:48:39 +09:00

340 lines
8.1 KiB
JSON

{
"name": "robeing-github-service-request",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "skills/github/request",
"responseMode": "responseNode",
"options": {}
},
"id": "gh-req-001",
"name": "Webhook In",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [200, 260]
},
{
"parameters": {
"jsCode": "const body = $json.body || {};\nreturn {\n intent: body.intent || '',\n slots: body.slots || {},\n user_id: body.user_id || '',\n channel: body.channel || 'slack',\n robeing_id: body.robeing_id || 'rb8001'\n};"
},
"id": "gh-req-002",
"name": "Normalize Payload",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [440, 260]
},
{
"parameters": {
"jsCode": "const validIntents = new Set(['github_analyze', 'github_manage', 'git_ops']);\nreturn {\n ...$json,\n valid_intent: validIntents.has($json.intent)\n};"
},
"id": "gh-req-003",
"name": "Validate Intent",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [700, 260]
},
{
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.valid_intent }}"
}
]
}
},
"id": "gh-req-004",
"name": "Intent OK?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [940, 260]
},
{
"parameters": {
"jsCode": "const slots = $json.slots || {};\nconst risk = slots.risk_level || 'low';\nconst requiresConfirmation = Boolean(slots.requires_confirmation);\nconst criticalActions = new Set(['force_push', 'reset_hard', 'delete_branch', 'delete_release']);\nconst action = slots.action || '';\nreturn {\n ...$json,\n risk_level: risk,\n denied: criticalActions.has(action) || risk === 'critical',\n requires_confirmation: requiresConfirmation || risk === 'high'\n};"
},
"id": "gh-req-005",
"name": "Risk Decision",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [1180, 260]
},
{
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.denied }}"
}
]
}
},
"id": "gh-req-006",
"name": "Denied?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [1420, 180]
},
{
"parameters": {
"conditions": {
"boolean": [
{
"value1": "={{ $json.requires_confirmation }}"
}
]
}
},
"id": "gh-req-007",
"name": "Needs Confirmation?",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [1420, 360]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.intent }}",
"operation": "equals",
"value2": "github_analyze"
}
]
}
},
"id": "gh-req-008",
"name": "Route Analyze",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [1660, 500]
},
{
"parameters": {
"conditions": {
"string": [
{
"value1": "={{ $json.intent }}",
"operation": "equals",
"value2": "github_manage"
}
]
}
},
"id": "gh-req-009",
"name": "Route Manage",
"type": "n8n-nodes-base.if",
"typeVersion": 2,
"position": [1900, 560]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: false, message: 'unknown_intent', intent: $json.intent } }}"
},
"id": "gh-req-010",
"name": "Reject Unknown Intent",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1180, 420]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: false, message: 'critical_action_denied', intent: $json.intent, slots: $json.slots } }}"
},
"id": "gh-req-011",
"name": "Reject Critical",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1660, 120]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: false, message: 'confirmation_required', intent: $json.intent, slots: $json.slots } }}"
},
"id": "gh-req-012",
"name": "Return Confirmation",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1660, 320]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: true, dispatch: 'analyze_target', intent: $json.intent, slots: $json.slots } }}"
},
"id": "gh-req-013",
"name": "Dispatch Analyze",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [1900, 460]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: true, dispatch: 'manage_resource', intent: $json.intent, slots: $json.slots } }}"
},
"id": "gh-req-014",
"name": "Dispatch Manage",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [2140, 520]
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ { success: true, dispatch: 'run_git_operation', intent: $json.intent, slots: $json.slots } }}"
},
"id": "gh-req-015",
"name": "Dispatch Git Ops",
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1,
"position": [2140, 620]
}
],
"connections": {
"Webhook In": {
"main": [
[
{
"node": "Normalize Payload",
"type": "main",
"index": 0
}
]
]
},
"Normalize Payload": {
"main": [
[
{
"node": "Validate Intent",
"type": "main",
"index": 0
}
]
]
},
"Validate Intent": {
"main": [
[
{
"node": "Intent OK?",
"type": "main",
"index": 0
}
]
]
},
"Intent OK?": {
"main": [
[
{
"node": "Risk Decision",
"type": "main",
"index": 0
}
],
[
{
"node": "Reject Unknown Intent",
"type": "main",
"index": 0
}
]
]
},
"Risk Decision": {
"main": [
[
{
"node": "Denied?",
"type": "main",
"index": 0
}
]
]
},
"Denied?": {
"main": [
[
{
"node": "Reject Critical",
"type": "main",
"index": 0
}
],
[
{
"node": "Needs Confirmation?",
"type": "main",
"index": 0
}
]
]
},
"Needs Confirmation?": {
"main": [
[
{
"node": "Return Confirmation",
"type": "main",
"index": 0
}
],
[
{
"node": "Route Analyze",
"type": "main",
"index": 0
}
]
]
},
"Route Analyze": {
"main": [
[
{
"node": "Dispatch Analyze",
"type": "main",
"index": 0
}
],
[
{
"node": "Route Manage",
"type": "main",
"index": 0
}
]
]
},
"Route Manage": {
"main": [
[
{
"node": "Dispatch Manage",
"type": "main",
"index": 0
}
],
[
{
"node": "Dispatch Git Ops",
"type": "main",
"index": 0
}
]
]
}
},
"pinData": {},
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "robeing-skills"
}
}