gitinstall 1.1.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. gitinstall/__init__.py +61 -0
  2. gitinstall/_sdk.py +541 -0
  3. gitinstall/academic.py +831 -0
  4. gitinstall/admin.html +327 -0
  5. gitinstall/auto_update.py +384 -0
  6. gitinstall/autopilot.py +349 -0
  7. gitinstall/badge.py +476 -0
  8. gitinstall/checkpoint.py +330 -0
  9. gitinstall/cicd.py +499 -0
  10. gitinstall/clawhub.html +718 -0
  11. gitinstall/config_schema.py +353 -0
  12. gitinstall/db.py +984 -0
  13. gitinstall/db_backend.py +445 -0
  14. gitinstall/dep_chain.py +337 -0
  15. gitinstall/dependency_audit.py +1153 -0
  16. gitinstall/detector.py +542 -0
  17. gitinstall/doctor.py +493 -0
  18. gitinstall/education.py +869 -0
  19. gitinstall/enterprise.py +802 -0
  20. gitinstall/error_fixer.py +953 -0
  21. gitinstall/event_bus.py +251 -0
  22. gitinstall/executor.py +577 -0
  23. gitinstall/feature_flags.py +138 -0
  24. gitinstall/fetcher.py +921 -0
  25. gitinstall/huggingface.py +922 -0
  26. gitinstall/hw_detect.py +988 -0
  27. gitinstall/i18n.py +664 -0
  28. gitinstall/installer_registry.py +362 -0
  29. gitinstall/knowledge_base.py +379 -0
  30. gitinstall/license_check.py +605 -0
  31. gitinstall/llm.py +569 -0
  32. gitinstall/log.py +236 -0
  33. gitinstall/main.py +1408 -0
  34. gitinstall/mcp_agent.py +841 -0
  35. gitinstall/mcp_server.py +386 -0
  36. gitinstall/monorepo.py +810 -0
  37. gitinstall/multi_source.py +425 -0
  38. gitinstall/onboard.py +276 -0
  39. gitinstall/planner.py +222 -0
  40. gitinstall/planner_helpers.py +323 -0
  41. gitinstall/planner_known_projects.py +1010 -0
  42. gitinstall/planner_templates.py +996 -0
  43. gitinstall/remote_gpu.py +633 -0
  44. gitinstall/resilience.py +608 -0
  45. gitinstall/run_tests.py +572 -0
  46. gitinstall/skills.py +476 -0
  47. gitinstall/tool_schemas.py +324 -0
  48. gitinstall/trending.py +279 -0
  49. gitinstall/uninstaller.py +415 -0
  50. gitinstall/validate_top100.py +607 -0
  51. gitinstall/watchdog.py +180 -0
  52. gitinstall/web.py +1277 -0
  53. gitinstall/web_ui.html +2277 -0
  54. gitinstall-1.1.0.dist-info/METADATA +275 -0
  55. gitinstall-1.1.0.dist-info/RECORD +59 -0
  56. gitinstall-1.1.0.dist-info/WHEEL +5 -0
  57. gitinstall-1.1.0.dist-info/entry_points.txt +3 -0
  58. gitinstall-1.1.0.dist-info/licenses/LICENSE +21 -0
  59. gitinstall-1.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,138 @@
1
+ """
2
+ feature_flags.py - 功能开关系统
3
+ =================================
4
+
5
+ 灵感来源:ICE-cluade-SCompany 的 Feature Flag 架构
6
+
7
+ 通过环境变量控制功能模块的开关,支持:
8
+ 1. 灰度发布:新功能先小范围测试
9
+ 2. 运行时切换:无需重启即可开关功能
10
+ 3. 默认值管理:每个 flag 有合理默认值
11
+ 4. 分组管理:按模块分组管理 flags
12
+
13
+ 环境变量格式:GITINSTALL_<FLAG_NAME>=1|0|true|false
14
+
15
+ 零外部依赖,纯 Python 标准库。
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import os
21
+ from dataclasses import dataclass, field
22
+ from typing import Optional
23
+
24
+
25
+ @dataclass
26
+ class FeatureFlag:
27
+ """单个功能开关"""
28
+ name: str
29
+ description: str
30
+ default: bool = False
31
+ group: str = "general" # general, security, experimental, performance
32
+ env_var: str = "" # 自动生成: GITINSTALL_<NAME>
33
+
34
+ def __post_init__(self):
35
+ if not self.env_var:
36
+ self.env_var = f"GITINSTALL_{self.name.upper()}"
37
+
38
+
39
+ # ── 全局功能开关注册表 ──
40
+ _FLAGS: dict[str, FeatureFlag] = {}
41
+
42
+
43
+ def _register(name: str, description: str, default: bool = False,
44
+ group: str = "general") -> FeatureFlag:
45
+ """注册一个功能开关"""
46
+ flag = FeatureFlag(name=name, description=description,
47
+ default=default, group=group)
48
+ _FLAGS[name] = flag
49
+ return flag
50
+
51
+
52
+ # ─────────────────────────────────────────────
53
+ # 内置功能开关定义
54
+ # ─────────────────────────────────────────────
55
+
56
+ # 安全相关
57
+ _register("pre_audit", "安装前自动执行依赖安全审计", default=True, group="security")
58
+ _register("license_check", "安装前自动检查许可证兼容性", default=True, group="security")
59
+
60
+ # 实验性功能
61
+ _register("knowledge_base", "启用安装知识库(记录+匹配历史案例)", default=True, group="experimental")
62
+ _register("checkpoint_resume", "启用安装断点恢复", default=True, group="experimental")
63
+ _register("watchdog", "启用安装看门狗(超时监控)", default=True, group="experimental")
64
+ _register("event_bus", "启用事件总线 + Webhook 通知", default=False, group="experimental")
65
+ _register("dep_chain", "启用依赖链可视化", default=True, group="experimental")
66
+
67
+ # 性能相关
68
+ _register("autopilot", "启用批量安装自动驾驶模式", default=False, group="performance")
69
+ _register("parallel_preflight", "预检层并行执行", default=False, group="performance")
70
+
71
+ # 通用
72
+ _register("skills_match", "安装时自动匹配社区 Skills", default=True, group="general")
73
+ _register("telemetry", "发送匿名安装遥测", default=True, group="general")
74
+ _register("auto_track", "安装成功后自动记录到 InstallTracker", default=True, group="general")
75
+
76
+
77
+ # ─────────────────────────────────────────────
78
+ # 核心 API
79
+ # ─────────────────────────────────────────────
80
+
81
+ def is_enabled(name: str) -> bool:
82
+ """检查功能开关是否启用"""
83
+ flag = _FLAGS.get(name)
84
+ if not flag:
85
+ return False
86
+
87
+ # 环境变量优先
88
+ env_val = os.environ.get(flag.env_var, "").strip().lower()
89
+ if env_val in ("1", "true", "yes", "on"):
90
+ return True
91
+ if env_val in ("0", "false", "no", "off"):
92
+ return False
93
+
94
+ # 使用默认值
95
+ return flag.default
96
+
97
+
98
+ def get_flag(name: str) -> Optional[FeatureFlag]:
99
+ """获取功能开关定义"""
100
+ return _FLAGS.get(name)
101
+
102
+
103
+ def list_flags(group: str = None) -> list[FeatureFlag]:
104
+ """列出所有功能开关"""
105
+ flags = list(_FLAGS.values())
106
+ if group:
107
+ flags = [f for f in flags if f.group == group]
108
+ return flags
109
+
110
+
111
+ def get_all_status() -> dict[str, bool]:
112
+ """获取所有功能开关的当前状态"""
113
+ return {name: is_enabled(name) for name in _FLAGS}
114
+
115
+
116
+ def format_flags_table() -> str:
117
+ """格式化功能开关状态表"""
118
+ lines = ["🚩 功能开关状态:", ""]
119
+ groups: dict[str, list] = {}
120
+ for flag in _FLAGS.values():
121
+ groups.setdefault(flag.group, []).append(flag)
122
+
123
+ group_icons = {"security": "🔒", "experimental": "🧪",
124
+ "performance": "⚡", "general": "⚙️"}
125
+
126
+ for group_name in ("security", "general", "experimental", "performance"):
127
+ flags = groups.get(group_name, [])
128
+ if not flags:
129
+ continue
130
+ icon = group_icons.get(group_name, "")
131
+ lines.append(f" {icon} {group_name.upper()}")
132
+ for f in flags:
133
+ status = "✅ ON " if is_enabled(f.name) else "❌ OFF"
134
+ lines.append(f" {status} {f.name:<22} {f.description}")
135
+ lines.append(f" env: {f.env_var}=1|0")
136
+ lines.append("")
137
+
138
+ return "\n".join(lines)