MCPcopy Create free account
hub / github.com/Louisym/MiniCC / parse_feature_config

Function parse_feature_config

mini_claude_code/config.py:107–145  ·  view source on GitHub ↗

从 merged dict 中解析 feature config。 源码: config.rs:230-239 CC 里每个字段都有独立的 parse_optional_xxx() 函数。 我们简化为一个函数,但保持"显式提取+验证"的精神。

(merged: dict)

Source from the content-addressed store, hash-verified

105
106
107def parse_feature_config(merged: dict) -> RuntimeFeatureConfig:
108 """从 merged dict 中解析 feature config。
109
110 源码: config.rs:230-239
111 CC 里每个字段都有独立的 parse_optional_xxx() 函数。
112 我们简化为一个函数,但保持"显式提取+验证"的精神。
113 """
114 hooks = merged.get("hooks", {})
115 if not isinstance(hooks, dict):
116 raise ConfigError("hooks: expected JSON object", kind="parse")
117
118 pre = hooks.get("PreToolUse", [])
119 post = hooks.get("PostToolUse", [])
120 if not isinstance(pre, list) or not isinstance(post, list):
121 raise ConfigError("hooks.PreToolUse/PostToolUse: must be arrays", kind="parse")
122
123 # permission_mode: CC 支持多种别名 (config.rs:511-518)
124 raw_mode = merged.get("permissionMode")
125 permission_mode = None
126 if isinstance(raw_mode, str):
127 mode_map = {
128 "default": "read-only", "plan": "read-only", "read-only": "read-only",
129 "acceptEdits": "workspace-write", "auto": "workspace-write",
130 "workspace-write": "workspace-write",
131 "dontAsk": "danger-full-access", "danger-full-access": "danger-full-access",
132 }
133 if raw_mode not in mode_map:
134 raise ConfigError(f"permissionMode: unsupported mode '{raw_mode}'", kind="parse")
135 permission_mode = mode_map[raw_mode]
136
137 return RuntimeFeatureConfig(
138 hooks_pre_tool_use=pre,
139 hooks_post_tool_use=post,
140 model=merged.get("model"),
141 permission_mode=permission_mode,
142 timeout=merged.get("timeout", 30),
143 max_iterations=merged.get("maxIterations", 10),
144 token_budget=merged.get("tokenBudget", 200_000),
145 )
146
147
148# ============================================================

Callers 1

loadMethod · 0.85

Calls 3

ConfigErrorClass · 0.70
getMethod · 0.45

Tested by

no test coverage detected