glad-web 1.0.19 → 1.0.21

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.
@@ -0,0 +1,82 @@
1
+ const MODEL_ALIASES = new Set(['default', 'env', 'sonnet', 'opus', 'haiku']);
2
+ const EFFORT_LEVELS = new Set(['low', 'medium', 'high', 'xhigh', 'max']);
3
+
4
+ function cleanEnvValue(value) {
5
+ const text = String(value || '').trim();
6
+ return text || null;
7
+ }
8
+
9
+ function readClaudeEnv(env = process.env) {
10
+ return {
11
+ anthropicModel: cleanEnvValue(env.ANTHROPIC_MODEL),
12
+ sonnetModel: cleanEnvValue(env.ANTHROPIC_DEFAULT_SONNET_MODEL),
13
+ opusModel: cleanEnvValue(env.ANTHROPIC_DEFAULT_OPUS_MODEL),
14
+ haikuModel: cleanEnvValue(env.ANTHROPIC_DEFAULT_HAIKU_MODEL),
15
+ subagentModel: cleanEnvValue(env.CLAUDE_CODE_SUBAGENT_MODEL),
16
+ effort: normalizeEffort(env.CLAUDE_CODE_EFFORT_LEVEL)
17
+ };
18
+ }
19
+
20
+ function normalizeModel(value, env = process.env) {
21
+ const model = String(value || '').trim();
22
+ if (model) return model;
23
+ return readClaudeEnv(env).anthropicModel ? 'env' : 'sonnet';
24
+ }
25
+
26
+ function normalizeEffort(value, env = process.env) {
27
+ const effort = String(value || '').trim().toLowerCase();
28
+ if (EFFORT_LEVELS.has(effort)) return effort;
29
+ const envEffort = String(env.CLAUDE_CODE_EFFORT_LEVEL || '').trim().toLowerCase();
30
+ return EFFORT_LEVELS.has(envEffort) ? envEffort : 'medium';
31
+ }
32
+
33
+ function resolveClaudeModel(value, env = process.env) {
34
+ const selected = normalizeModel(value, env);
35
+ const config = readClaudeEnv(env);
36
+ if (selected === 'default') return undefined;
37
+ if (selected === 'env') return config.anthropicModel || undefined;
38
+ if (selected === 'sonnet') return config.sonnetModel || 'sonnet';
39
+ if (selected === 'opus') return config.opusModel || 'opus';
40
+ if (selected === 'haiku') return config.haikuModel || 'haiku';
41
+ return selected;
42
+ }
43
+
44
+ function modelOption(value, label, resolved, source) {
45
+ return {
46
+ value,
47
+ label,
48
+ resolved: resolved || null,
49
+ source
50
+ };
51
+ }
52
+
53
+ function getClaudeRuntimeConfig(env = process.env) {
54
+ const config = readClaudeEnv(env);
55
+ const options = [
56
+ modelOption('default', 'Default', null, 'Claude default')
57
+ ];
58
+ if (config.anthropicModel) {
59
+ options.push(modelOption('env', 'Env', config.anthropicModel, 'ANTHROPIC_MODEL'));
60
+ }
61
+ options.push(
62
+ modelOption('sonnet', 'Sonnet', config.sonnetModel || 'sonnet', 'ANTHROPIC_DEFAULT_SONNET_MODEL'),
63
+ modelOption('opus', 'Opus', config.opusModel || 'opus', 'ANTHROPIC_DEFAULT_OPUS_MODEL'),
64
+ modelOption('haiku', 'Haiku', config.haikuModel || 'haiku', 'ANTHROPIC_DEFAULT_HAIKU_MODEL')
65
+ );
66
+
67
+ return {
68
+ defaultModel: config.anthropicModel ? 'env' : 'sonnet',
69
+ defaultEffort: config.effort,
70
+ models: options,
71
+ env: config
72
+ };
73
+ }
74
+
75
+ module.exports = {
76
+ EFFORT_LEVELS,
77
+ MODEL_ALIASES,
78
+ getClaudeRuntimeConfig,
79
+ normalizeEffort,
80
+ normalizeModel,
81
+ resolveClaudeModel
82
+ };