feat: create SkyEye Governance Layer with infra manifest, quota ledger, and service guards
Add the skyeye/ directory structure including: - infra-manifest.json: infrastructure inventory and quota definitions - quota-ledger.json: billing cycle tracking and health summary - guards/: per-service guard configs (GitHub, Drive, Notion, Actions, Gemini) - guards/guard-template.json: template for new service guards - scripts/: placeholder files for scan-engine, optimizer, guard-factory, quota-tracker, self-healer, and weekly-scan - scan-report/, logs/daily/, logs/weekly/: empty dirs for future output Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
parent
ed2d208f7b
commit
9dc94a7b3a
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"guard_id": "GUARD-ACTIONS",
|
||||
"target_service": "GitHub Actions",
|
||||
"status": "active",
|
||||
"mode": "buffer",
|
||||
"buffer_policy": {
|
||||
"enabled": true,
|
||||
"buffer_path": "buffer/actions-staging/",
|
||||
"max_buffer_age_hours": 24,
|
||||
"flush_strategy": "scheduled",
|
||||
"flush_schedule_cst": ["21:30"]
|
||||
},
|
||||
"quota_policy": {
|
||||
"monthly_limit": 2000,
|
||||
"current_month_used": 0,
|
||||
"daily_soft_limit": 67,
|
||||
"warning_threshold_percent": 70,
|
||||
"critical_threshold_percent": 90,
|
||||
"on_warning": "reduce_frequency",
|
||||
"on_critical": "emergency_only"
|
||||
},
|
||||
"trigger_policy": {
|
||||
"default_frequency": "3_per_day",
|
||||
"min_frequency": "1_per_day",
|
||||
"max_frequency": "6_per_day",
|
||||
"auto_adjust": true,
|
||||
"adjust_based_on": ["quota_remaining", "message_volume", "error_rate"]
|
||||
},
|
||||
"health_check": {
|
||||
"enabled": true,
|
||||
"method": "workflow_status_check",
|
||||
"interval_hours": 6,
|
||||
"last_check": null,
|
||||
"last_status": "healthy",
|
||||
"consecutive_failures": 0,
|
||||
"max_failures_before_alert": 3
|
||||
},
|
||||
"last_updated_by": "skyeye-init",
|
||||
"last_updated_at": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"guard_id": "GUARD-DRIVE",
|
||||
"target_service": "Google Drive API",
|
||||
"status": "active",
|
||||
"mode": "buffer",
|
||||
"buffer_policy": {
|
||||
"enabled": true,
|
||||
"buffer_path": "buffer/drive-staging/",
|
||||
"max_buffer_age_hours": 24,
|
||||
"flush_strategy": "scheduled",
|
||||
"flush_schedule_cst": ["21:30"]
|
||||
},
|
||||
"quota_policy": {
|
||||
"monthly_limit": 15,
|
||||
"current_month_used": 0,
|
||||
"daily_soft_limit": 0,
|
||||
"warning_threshold_percent": 70,
|
||||
"critical_threshold_percent": 90,
|
||||
"on_warning": "reduce_frequency",
|
||||
"on_critical": "emergency_only"
|
||||
},
|
||||
"trigger_policy": {
|
||||
"default_frequency": "3_per_day",
|
||||
"min_frequency": "1_per_day",
|
||||
"max_frequency": "6_per_day",
|
||||
"auto_adjust": true,
|
||||
"adjust_based_on": ["quota_remaining", "message_volume", "error_rate"]
|
||||
},
|
||||
"health_check": {
|
||||
"enabled": true,
|
||||
"method": "api_ping",
|
||||
"interval_hours": 6,
|
||||
"last_check": null,
|
||||
"last_status": "healthy",
|
||||
"consecutive_failures": 0,
|
||||
"max_failures_before_alert": 3
|
||||
},
|
||||
"last_updated_by": "skyeye-init",
|
||||
"last_updated_at": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"guard_id": "GUARD-GEMINI",
|
||||
"target_service": "Google Gemini API",
|
||||
"status": "active",
|
||||
"mode": "buffer",
|
||||
"buffer_policy": {
|
||||
"enabled": true,
|
||||
"buffer_path": "buffer/gemini-staging/",
|
||||
"max_buffer_age_hours": 24,
|
||||
"flush_strategy": "scheduled",
|
||||
"flush_schedule_cst": ["21:30"]
|
||||
},
|
||||
"quota_policy": {
|
||||
"monthly_limit": 1500,
|
||||
"current_month_used": 0,
|
||||
"daily_soft_limit": 50,
|
||||
"warning_threshold_percent": 70,
|
||||
"critical_threshold_percent": 90,
|
||||
"on_warning": "reduce_frequency",
|
||||
"on_critical": "emergency_only"
|
||||
},
|
||||
"trigger_policy": {
|
||||
"default_frequency": "3_per_day",
|
||||
"min_frequency": "1_per_day",
|
||||
"max_frequency": "6_per_day",
|
||||
"auto_adjust": true,
|
||||
"adjust_based_on": ["quota_remaining", "message_volume", "error_rate"]
|
||||
},
|
||||
"health_check": {
|
||||
"enabled": true,
|
||||
"method": "api_ping",
|
||||
"interval_hours": 6,
|
||||
"last_check": null,
|
||||
"last_status": "healthy",
|
||||
"consecutive_failures": 0,
|
||||
"max_failures_before_alert": 3
|
||||
},
|
||||
"last_updated_by": "skyeye-init",
|
||||
"last_updated_at": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"guard_id": "GUARD-GITHUB",
|
||||
"target_service": "GitHub API",
|
||||
"status": "active",
|
||||
"mode": "buffer",
|
||||
"buffer_policy": {
|
||||
"enabled": true,
|
||||
"buffer_path": "buffer/inbox/",
|
||||
"max_buffer_age_hours": 24,
|
||||
"flush_strategy": "scheduled",
|
||||
"flush_schedule_cst": ["21:30"]
|
||||
},
|
||||
"quota_policy": {
|
||||
"monthly_limit": 2000,
|
||||
"current_month_used": 0,
|
||||
"daily_soft_limit": 67,
|
||||
"warning_threshold_percent": 70,
|
||||
"critical_threshold_percent": 90,
|
||||
"on_warning": "reduce_frequency",
|
||||
"on_critical": "emergency_only"
|
||||
},
|
||||
"trigger_policy": {
|
||||
"default_frequency": "3_per_day",
|
||||
"min_frequency": "1_per_day",
|
||||
"max_frequency": "6_per_day",
|
||||
"auto_adjust": true,
|
||||
"adjust_based_on": ["quota_remaining", "message_volume", "error_rate"]
|
||||
},
|
||||
"health_check": {
|
||||
"enabled": true,
|
||||
"method": "api_ping",
|
||||
"interval_hours": 6,
|
||||
"last_check": null,
|
||||
"last_status": "healthy",
|
||||
"consecutive_failures": 0,
|
||||
"max_failures_before_alert": 3
|
||||
},
|
||||
"last_updated_by": "skyeye-init",
|
||||
"last_updated_at": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"guard_id": "GUARD-[SERVICE_NAME]",
|
||||
"target_service": "[Service Name]",
|
||||
"status": "initializing",
|
||||
"mode": "buffer",
|
||||
"buffer_policy": {
|
||||
"enabled": true,
|
||||
"buffer_path": "buffer/[service]-staging/",
|
||||
"max_buffer_age_hours": 24,
|
||||
"flush_strategy": "scheduled",
|
||||
"flush_schedule_cst": ["21:30"]
|
||||
},
|
||||
"quota_policy": {
|
||||
"monthly_limit": "[TO_BE_FILLED]",
|
||||
"current_month_used": 0,
|
||||
"daily_soft_limit": 0,
|
||||
"warning_threshold_percent": 70,
|
||||
"critical_threshold_percent": 90,
|
||||
"on_warning": "reduce_frequency",
|
||||
"on_critical": "emergency_only"
|
||||
},
|
||||
"trigger_policy": {
|
||||
"default_frequency": "3_per_day",
|
||||
"min_frequency": "1_per_day",
|
||||
"max_frequency": "6_per_day",
|
||||
"auto_adjust": true,
|
||||
"adjust_based_on": ["quota_remaining", "message_volume", "error_rate"]
|
||||
},
|
||||
"health_check": {
|
||||
"enabled": true,
|
||||
"method": "[TO_BE_FILLED]",
|
||||
"interval_hours": 6,
|
||||
"last_check": null,
|
||||
"last_status": "unknown",
|
||||
"consecutive_failures": 0,
|
||||
"max_failures_before_alert": 3
|
||||
},
|
||||
"last_updated_by": "skyeye-init",
|
||||
"last_updated_at": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"guard_id": "GUARD-NOTION",
|
||||
"target_service": "Notion API",
|
||||
"status": "active",
|
||||
"mode": "buffer",
|
||||
"buffer_policy": {
|
||||
"enabled": true,
|
||||
"buffer_path": "buffer/notion-staging/",
|
||||
"max_buffer_age_hours": 24,
|
||||
"flush_strategy": "scheduled",
|
||||
"flush_schedule_cst": ["21:30"]
|
||||
},
|
||||
"quota_policy": {
|
||||
"monthly_limit": 3,
|
||||
"current_month_used": 0,
|
||||
"daily_soft_limit": 0,
|
||||
"warning_threshold_percent": 70,
|
||||
"critical_threshold_percent": 90,
|
||||
"on_warning": "reduce_frequency",
|
||||
"on_critical": "emergency_only"
|
||||
},
|
||||
"trigger_policy": {
|
||||
"default_frequency": "3_per_day",
|
||||
"min_frequency": "1_per_day",
|
||||
"max_frequency": "6_per_day",
|
||||
"auto_adjust": true,
|
||||
"adjust_based_on": ["quota_remaining", "message_volume", "error_rate"]
|
||||
},
|
||||
"health_check": {
|
||||
"enabled": true,
|
||||
"method": "api_ping",
|
||||
"interval_hours": 6,
|
||||
"last_check": null,
|
||||
"last_status": "healthy",
|
||||
"consecutive_failures": 0,
|
||||
"max_failures_before_alert": 3
|
||||
},
|
||||
"last_updated_by": "skyeye-init",
|
||||
"last_updated_at": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
|
|
@ -0,0 +1,82 @@
|
|||
{
|
||||
"version": "1.0.0",
|
||||
"last_scan": "2026-03-23T12:00:00Z",
|
||||
"last_scan_by": "skyeye-weekly-scan",
|
||||
"infrastructure": {
|
||||
"github": {
|
||||
"service": "GitHub",
|
||||
"plan": "Free",
|
||||
"repos": [
|
||||
{
|
||||
"name": "qinfendebingshuo/guanghulab",
|
||||
"role": "main",
|
||||
"guard": "buffer/"
|
||||
},
|
||||
{
|
||||
"name": "WENZHUOXI/guanghu-awen",
|
||||
"role": "sub-repo",
|
||||
"persona": "PER-ZQ001",
|
||||
"guard": ".github/persona-brain/"
|
||||
}
|
||||
],
|
||||
"quotas": {
|
||||
"actions_minutes_per_month": 2000,
|
||||
"actions_current_used": 0,
|
||||
"actions_budget_allocated": {
|
||||
"buffer_collect": 270,
|
||||
"buffer_flush": 90,
|
||||
"skyeye_checkin": 180,
|
||||
"skyeye_weekly_scan": 30,
|
||||
"other_workflows": 200,
|
||||
"emergency_reserve": 1230
|
||||
},
|
||||
"storage_limit_gb": 0.5,
|
||||
"lfs_bandwidth_gb": 1
|
||||
}
|
||||
},
|
||||
"google_drive": {
|
||||
"service": "Google Drive",
|
||||
"plan": "Google One / Free 15GB",
|
||||
"guard": "buffer/drive-staging/",
|
||||
"quotas": {
|
||||
"storage_gb": 15,
|
||||
"current_used_gb": 0,
|
||||
"apps_script_daily_triggers": 20,
|
||||
"apps_script_runtime_min_per_day": 90,
|
||||
"drive_api_queries_per_100s": 20000
|
||||
}
|
||||
},
|
||||
"notion": {
|
||||
"service": "Notion",
|
||||
"plan": "Plus",
|
||||
"guard": "霜砚(PER-SY001)",
|
||||
"quotas": {
|
||||
"api_requests_per_second": 3,
|
||||
"blocks_per_page": 10000,
|
||||
"file_upload_mb": 5,
|
||||
"guest_limit": 100
|
||||
}
|
||||
},
|
||||
"gemini": {
|
||||
"service": "Google Gemini",
|
||||
"plan": "Free / Pro",
|
||||
"guard": "buffer/gemini-staging/",
|
||||
"quotas": {
|
||||
"requests_per_minute": 15,
|
||||
"requests_per_day": 1500,
|
||||
"context_window_tokens": 1000000,
|
||||
"personal_context_files": 100
|
||||
}
|
||||
},
|
||||
"github_actions": {
|
||||
"service": "GitHub Actions",
|
||||
"plan": "Free",
|
||||
"guard": "skyeye/guards/actions-guard.json",
|
||||
"quotas": {
|
||||
"concurrent_jobs": 20,
|
||||
"minutes_per_month": 2000,
|
||||
"job_timeout_hours": 6
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
{
|
||||
"ledger_version": "1.0.0",
|
||||
"billing_cycle": {
|
||||
"start": "2026-03-01",
|
||||
"end": "2026-03-31"
|
||||
},
|
||||
"services": {
|
||||
"github_actions": {
|
||||
"limit": 2000,
|
||||
"used": 0,
|
||||
"remaining": 2000,
|
||||
"allocated": {
|
||||
"buffer_system": 360,
|
||||
"skyeye_daily": 180,
|
||||
"skyeye_weekly": 30,
|
||||
"sub_repo_checkins": 200,
|
||||
"emergency": 1230
|
||||
},
|
||||
"daily_entries": []
|
||||
},
|
||||
"google_drive": {
|
||||
"storage_limit_gb": 15,
|
||||
"storage_used_gb": 0,
|
||||
"apps_script_triggers_today": 0,
|
||||
"apps_script_triggers_limit": 20
|
||||
},
|
||||
"notion_api": {
|
||||
"rate_limit_per_second": 3,
|
||||
"requests_today": 0,
|
||||
"errors_today": 0
|
||||
},
|
||||
"gemini": {
|
||||
"daily_limit": 1500,
|
||||
"daily_used": 0,
|
||||
"per_minute_limit": 15
|
||||
}
|
||||
},
|
||||
"health_summary": {
|
||||
"overall": "healthy",
|
||||
"alerts": [],
|
||||
"last_updated": "2026-03-23T12:00:00Z"
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue